알고리즘(백준)/BFS & DFS

[알고리즘/BFS & DFS] 1697번 : 숨바꼭질 - python

되다 2024. 2. 1. 18:38

링크 : https://www.acmicpc.net/problem/1697

 

1697번: 숨바꼭질

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

www.acmicpc.net

 


  • 문제
  • 소요시간: 18분 35초


  • 설계하기(접근방법) 

1. 입력받기

시작 지점과 목표 지점을 입력받는다

 

2. 구현하기

bfs 문제인데 배열을 만든다

nx = [-1, +1, i ==2 일 때 x *= 2]

 

visited 배열을 100001개를 선언해주고

nx의 범위 역시 100000을 벗어나지 않도록 해준다

 

각각의 케이스를 q에 apppend 하고

nx가 target 과 같다면 

break를 해준다

 

해주지 않는다면 무한루프를 돈다

 

 

3. 출력하기

 

 


  • 코드(출력)
from collections import deque


def dfs(x,y):
    q= deque()
    dx = [-1, +1]
    q.append(x)
    while q:
        x = q.popleft()
        for i in range(3):
            if i < 2:
                nx = x + dx[i]
            elif i == 2:
                nx = x * 2
            if 0 <= nx < 100001:
                if visited[nx] == 0:
                    visited[nx] = visited[x] + 1
                    if nx == y:
                        break
                    q.append(nx)
        if nx == y:
            break



start, target = map(int, input().split())

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

dfs(start, target)


print(visited[target] - 1)

  • 얻어갈 부분

1. 변형 dx 배열을 선언해서 문제를 풀어봤다