문제 : https://www.acmicpc.net/problem/15558
BFS 문제다.
현재 위치를 x, 현재 줄을 line, 현재 시간을 time이라 할 때, 큐에 각각 [(line+1) %2, x + (k, 1, -1), time+1]을 넣어준다.
이때, ( (line+1) %2, x + (k, 1, -1) ) 에 대해 이미 탐색한 곳인지를 확인해야 한다.
또한, 새로운 위치가 N을 넘었는지, 그리고 지워진 칸에 있는지를 확인해야 한다.
특별히 복잡한 코드가 아니라서 코드로 보는게 더 좋다.
import sys
from collections import deque
n, k = [int(i) for i in sys.stdin.readline().split()]
d = []
v = dict()
for _ in range(2):
d.append([int(i) for i in sys.stdin.readline().strip()])
q = deque()
q.append([0, 0, -1])
v[(0, 0)] = True
while q:
line, x, time = q.popleft()
# x+k
newl, newx = (line+1)%2, x + k
if newx >=n:
print(1)
sys.exit()
if x <=time:
continue
if (newl,newx) not in v and d[newl][newx] ==1:
q.append([newl, newx, time+1])
v[(newl,newx)] = True
# x+1
newl, newx = line, x + 1
if newx >=n:
print(1)
sys.exit()
if x <=time:
continue
if (newl,newx) not in v and d[newl][newx] ==1:
q.append([newl, newx, time+1])
v[(newl,newx)] = True
# x-1
newl, newx = line, x - 1
if newx >=n:
print(1)
sys.exit()
if x <=time:
continue
if (newl,newx) not in v and d[newl][newx] ==1:
q.append([newl, newx, time+1])
v[(newl,newx)] = True
print(0)
'취준 > 백준' 카테고리의 다른 글
2020-03-21 코딩테스트 대비 모의고사 후기 (0) | 2020.03.25 |
---|---|
[백준][Python][17140][시뮬레이션] 이차원 배열과 연산 (0) | 2020.03.21 |
[백준][Python][17822][구현] 원판 돌리기 (0) | 2020.03.13 |
[백준][Python][13913][BFS] 숨바꼭질 4 (0) | 2020.03.08 |
[백준][Python][13549][BFS] 숨바꼭질 3 (0) | 2020.03.07 |