코딩 테스트 준비
숨박꼭질 2 - 골드 4 (백준, BFS)
개발쉐발
2023. 1. 13. 22:05
728x90
반응형
def bfs(start):
global result
q = deque()
q.append(start)
arr[start] = 0
while q:
x = q.popleft()
if x == K:
result += 1
continue
for nx in (x*2, x+1, x-1):
# 최소시간이 arr[K]에 이미 있는 경우에는 같을 때도
# q.append해서 result가 증가될 수 있도록
if 0 <= nx < 100001 and (arr[nx] == arr[x] + 1 or arr[nx] == -1):
arr[nx] = arr[x] + 1
q.append(nx)
N, K = map(int, input().split())
arr = [-1] * 100001
result = 0
bfs(N)
print(arr[K])
print(result)
1. q가 빌때까지 x+1, x-1, x*2로 이동을 반복을 한다. (우선순위를 x*2로 두었다)
- arr[nx]에 이전시간+1 을 해주고 q에 append (첫 방문이거나 시간이 같은 경우)
- x가 동생의 위치(K)이면 result += 1 (가능한 경우의 수 1증가)
2. 최소 시간과 경우의 수 출력
BFS로 3 가지 이동 방법을 모두 사용하여 가능한 경우의 수를 추론해내는 방식이다.
728x90
반응형