개발자 블로그

1697번 숨바꼭질 본문

알고리즘/백준

1697번 숨바꼭질

hayongwoon 2022. 7. 25. 20:01

문제 설명

 

1697번: 숨바꼭질

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

www.acmicpc.net

 

나의 풀이

from collections import deque, defaultdict


def bfs(start_number, target_number):
    q = deque()
    q.append(start_number)
    distance_dict = defaultdict(int)
    distance_dict[start_number] = 0

    dx = [-1, 1]
    while q:
        cur_num = q.popleft()

        if cur_num == target_number:
            return distance_dict[cur_num]

        for i in range(3):
            if i < 2:
                next_num = cur_num + dx[i]
            else:
                next_num = cur_num*2

            if 0<=next_num<=100000 and not distance_dict[next_num]:
                distance_dict[next_num] = distance_dict[cur_num] + 1
                q.append(next_num)

start_number, target_number = map(int, input().split())
print(bfs(start_number, target_number))

 시작하는 숫자, 타겟하는 숫자를 인자로 받아 조건에 맞게 시작하는 숫자를 타겟하는 숫자의 최단거리로 가기 위해 -1, +1, *2를 하여 타겟 값에 q자료구조를 활용하여 bfs로 접근한다.

 최단 거리를 구하기 위해 나는 defaultdict를 활용해서 접근하지 않은 값은 0이 나오게 그리고 해당 값의 거리를 전의 값보다 +1을하여 거리를 업데이트 최종적으로 cur_num이 target_num과 같아지면 리턴해주고 그 거리를 반환해준다. 

 

'알고리즘 > 백준' 카테고리의 다른 글

1525번 퍼즐  (0) 2022.07.28
2664번 촌수계산  (0) 2022.07.27
2468번 안전 영역  (0) 2022.07.24
7576번 토마토  (0) 2022.07.21
1012번 유기농 배추  (0) 2022.07.18