반응형
[시간초과 난 코드]
(궁시렁궁시렁) 잘 굴러가면 되는거 아니냐구 왜 안돼 ㅠㅠ
M, N = map(int, input().split())
x1, y1, x2, y2= map(int, input().split())
maps=[]
for col in range(M):
maps.append(list(input()))
def solution(M,N, x1,y1, maps):
move =[
[0,1],
[1,0],
[0,-1],
[-1,0]
]
answer=0
gg= True
will_visit=[[x1-1, y1-1]]
visited=[]
while gg:
answer+=1
travel = will_visit[:]
real_travel=[]
# 0 까지의 세력 확장
while travel:
i= travel.pop()
for m in move:
flag = [i[0]+m[0],i[1]+m[1]]
if( 0<=flag[0]<M )and (0<=flag[1]<N):
if maps[flag[0]][ flag[1]]=='0':
if flag not in will_visit:
travel.append(flag)
will_visit.append(flag)
travel = will_visit[:]
# 주난의 쿵
next_count =[]
for i in will_visit:
if i in visited:
continue
else:
visited.append(i)
for m in move:
flag = [i[0]+m[0],i[1]+m[1]]
if( 0<=flag[0]<M )and (0<=flag[1]<N):
if maps[flag[0]][ flag[1]]=='0':
continue
elif maps[flag[0]][ flag[1]]=='#':
gg=False
return answer
else:
maps[flag[0]][ flag[1]]='0'
next_count.append(flag)
will_visit=next_count
print(solution(M,N, x1,y1, maps))
를 참고했다.
주난이 상하좌우, 대각선을 이동할 수 있다고 가정할때, 친구가 있는 곳 까지 이동하는데 1초가 걸리고, 빈공간이 있는 곳으로 이동하는데 0초가 걸린다고 생각하면 된다.
빈 공간으로 이동할때는 appendleft 로 큐의 맨 왼쪽으로 넣어주고, 친구가 있는 곳으로 이동할때는 append 를 이용해 큐의 오른쪽으로 넣어준다.
숨박꼭질3 과 유사한 문제라 heapq 를 이용해 풀어도된다함.
from collections import deque
n, m = map(int, input().split())
x1,y1,x2,y2= map(int, input().split())
D = [list(map(str, [*input()])) for _ in range(n)]
S =[[-1] *m for _ in range(n)]
q = deque()
q.append((x1-1, y1-1))
S[x1-1][y1-1] =0
dx,dy = [0,0,1,-1],[1,-1,0,0]
while q:
x, y = q.popleft()
for i in range(4):
nx,ny = x+dx[i] , y+dy[i]
if 0<=nx<n and 0<=ny<m and S[nx][xy] ==-1:
if D[nx][ny]=='0':
q.appendleft((nx,ny))
S[nx][ny] = S[x][y]
else:
q.append((nx, ny))
S[nx][ny] = S[x][y]+1
print(S[x2-1][y2-1])
반응형
'알고리즘' 카테고리의 다른 글
프로그래머스 DFS BFS 타겟 넘버 (0) | 2020.11.23 |
---|---|
프로그래머스 해쉬 위장 파이썬 (0) | 2020.11.19 |
프로그래머스 쿼드압축 후 개수 세기 (0) | 2020.11.18 |
프로그래머스 올바른 괄호 (0) | 2020.11.18 |
프로그래머스 해시 전롸번호 목록 (0) | 2020.11.18 |