https://school.programmers.co.kr/learn/courses/30/lessons/87694
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🐾 20220924
테두리 처리 어떻게하지....?
를 생각하다 모르겠어서 구글링했다.
생각보다 간단한 방법을 쓴다.
내부일 경우 0으로 채우고
내부가 아닌경우 0이 아닌지 확인하고(다른 도형의 내부인지) 둘 다 아니면 1을 저장해 모서리라는 것을 알려준다.
그런데 다들 *2를 해서 왜들 이러나... 이해가 안됐는데
아래 참고 블로그를 보고 단번에 이해했다.
경계선이 인접할 경우 의도하지 않은 최단거리가 발생해서 그런것이었다.
2배를 해서 구해주고 나중에 //2를 해준다.
경계선은 다 돌면서 내부는 0으로 , 내부가 아니고 이전 도형의 내부가 아닐경우 테두리로 처리하여 filed를 만들어준다.
그리고 BFS~~!!
코드 :
from collections import deque
dx = [0,1,0,-1]
dy = [1,0,-1,0]
def solution(rectangle, characterX, characterY, itemX, itemY):
answer = 0
field = [[-1] * 102 for i in range(102)]
for r in rectangle :
x1,y1,x2,y2 = map(lambda x : x*2, r)
for i in range(x1,x2+1) :
for j in range(y1,y2+1) :
if x1 < i < x2 and y1<j<y2 :
field[i][j] = 0
elif field[i][j] !=0 :
field[i][j] = 1
q = deque()
q.append([characterX * 2, characterY * 2])
vis = [[1] * 102 for i in range(102)]
while q :
x,y = q.popleft()
if x == itemX*2 and y == itemY*2 :
answer = vis[x][y] //2
break
for k in range(4) :
nx,ny = x + dx[k], y + dy[k]
if field[nx][ny] ==1 and vis[nx][ny] == 1 :
q.append([nx,ny])
vis[nx][ny] = vis[x][y] +1
return answer
생각보다 간단한데 ... 2배를 하는 아이디어는 어떻게 떠올리지...신기하넹🧠
아주 약간 다른 코드 :
from collections import deque
dx = [0,1,0,-1]
dy = [1,0,-1,0]
def solution(rectangle, characterX, characterY, itemX, itemY):
answer = 0
field = [[-1] * 102 for _ in range(102)]
for r in rectangle :
x1,y1,x2,y2 = map(lambda x : x*2,r)
for i in range(x1,x2+1) :
for j in range(y1,y2+1) :
# 내부
if x1<i<x2 and y1<j<y2 :
field[i][j] = 0
# 테두리
elif field[i][j] != 0 :
field[i][j] = 1
q = deque([[characterX*2,characterY*2]])
vis = [[-1] * 102 for _ in range(102)]
vis[characterX*2][characterY*2] = 1
while q :
x,y = q.popleft()
if x == itemX*2 and y == itemY*2 :
answer = (vis[x][y]//2)
break
for i in range(4) :
nx,ny= x + dx[i], y +dy[i]
if 0<=nx<102 and 0<=ny<102 and vis[nx][ny] == -1 and field[nx][ny]==1 :
q.append([nx,ny])
vis[nx][ny] = vis[x][y] +1
return answer
참고 블로그 :
[프로그래머스] 아이템 줍기
직사각형이 담긴 2차원 배열 rectangle, 초기 캐릭터의 위치 characterX, characterY, 아이템의 위치 itemX, itemY가 solution 함수의 매개변수로 주어질 때, 캐릭터가 아이템을 줍기 위해 이동해야 하는 가장 짧
velog.io
'알고리즘 > 프로그래머스문제풀이' 카테고리의 다른 글
[Python/프로그래머스]뉴스 클러스터링_(KaKao)_Counter이용 (0) | 2022.09.26 |
---|---|
[Python/프로그래머스]튜플_(KaKao)_문제 이해가 잘 안되요 (0) | 2022.09.26 |
[Python/프로그래머스]게임 맵 최단거리_(BFS) (0) | 2022.09.22 |
[Python/프로그래머스]배달_다익스트라 (0) | 2022.09.22 |
SQL_group,having,join (0) | 2022.09.21 |