728x90
반응형

방문한 곳의 최소 시간과 방법의 수를 출력해주어야 한다.

각 지점마다 두개의 정보를 가지고 있어야 하므로 이차원 배열로 선언해 주었다.

 

정답 코드 먼저 살펴보자

n, k = map(int, input().split())
MAX_LENGTH = 100001
visited = [[-1, 0] for _ in range(MAX_LENGTH)]

queue = []
queue.append(n)
# 처음 방문한 곳은 방문정보와 방법의 수를 업데이트
visited[n][0] = 0
visited[n][1] = 1

while queue :
  x = queue.pop(0)
  
  for i in [x-1, x+1, x*2] :
    if 0 <= i <= 100000 :
      # 방문한적이 없는 애들만 q에 넣어주자
      # 제일 처음 방문한 친구가 가장 최단 시간에 방문한 것일 거다.
      if visited[i][0] == -1 :
        visited[i][0] = visited[x][0] + 1
        visited[i][1] = visited[x][1]
        queue.append(i)
      
      # 방문한적이 있고 바로 다음 방문할 예정이라면
      # 방문예정인 곳의 방법의 수는 이전 스팟의 방법의 수를 더해주어야 한다.
      elif visited[i][0] == visited[x][0] + 1 :
        visited[i][1] += visited[x][1]

print(visited[k][0])
print(visited[k][1])

 

방법의 수를 같이 출력해주어야 해서 까다로웠던 문제로 기억 하고 있다.

최단시간은 이전에 방문한 적이 없을 경우에만 업데이트 해주었고

방법의 수는 최단 시간을 가리지 않으므로 이후 방문할 곳의 시간이 현재 + 1 이라면 방법의 수에 더해주었다.

 

 

 

https://www.acmicpc.net/problem/12851

 

12851번: 숨바꼭질 2

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때

www.acmicpc.net

 

출처: https://velog.io/@dhelee/%EB%B0%B1%EC%A4%80-12851%EB%B2%88-%EC%88%A8%EB%B0%94%EA%BC%AD%EC%A7%884-Python-%EB%84%88%EB%B9%84-%EC%9A%B0%EC%84%A0-%ED%83%90%EC%83%89BFS

728x90
반응형

'알고리즘' 카테고리의 다른 글

RGB거리2[백준 17404] - python  (0) 2021.12.11
숨바꼭질3[백준13549] - python  (0) 2021.12.10
최소공배수 [백준 1934] - python  (0) 2021.12.07
최대 힙[백준 11279] - python  (2) 2021.12.05
AC [백준 5430] - python  (0) 2021.12.05

+ Recent posts