코딩 테스트/Baekjoon

S1 1697. 숨바꼭질

  • -
728x90
반응형

문제 보기 :  1697번: 숨바꼭질


문제

  • 정답률 : 26%


작성 코드

from collections import deque

def find(start,bro):
    if start >= bro: #동생이 더 앞에 있는 경우
        return start-bro

    visited = [-1]*100001
    visited[start] = 0

    dd = deque([start])
    while dd:
        now = dd.popleft()
        can = (now-1,now+1,2*now)
        for jump in can:
            if jump == bro :
                return visited[now]+1
            if 0<=jump<=100000 and visited[jump]==-1:
                visited[jump] = visited[now]+1
                dd.append(jump)
    return visited[bro]

start, bro = map(int,input().split())
print(find(start,bro))

풀이

1차원 좌표로 풀이하는 방법인데, bfs 알고리즘을 사용했다.

동생이 수빈이 위치보다 앞에 있는 경우 무조건 -1로 n번 해서 이동해야하니, 바로 start-bro로 빼줬다.
그리고 visited를 -1로 둬서 해당 칸으로 오기 위해 거쳐야하는 이동 횟수를 두었다.
(딕셔너리로 대체라고 생각하면 편할 것 같다.
if 이동가능한 좌표 in 어떤 dictionary:
                 pass
else:
                 어떤 딕셔너리[이동가능한좌표] = 방금 움직인 횟수 + 1
)

320x100
728x90

'코딩 테스트 > Baekjoon' 카테고리의 다른 글

S1 10844. 쉬운 계단 수  (0) 2024.10.23
S1 2156. 포도주 시식  (1) 2024.10.22
S1 1149. RGB거리  (1) 2024.10.19
S1 1931. 회의실 배정  (0) 2024.10.18
S1 2667. 단지번호붙이기  (0) 2024.10.18
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.