Python/백준 - 기초
[백준] 1697번 숨바꼭질 - 파이썬(Python)
Justin P
2022. 2. 24. 16:31
문제 링크: https://www.acmicpc.net/problem/1697
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
import sys
from collections import deque
input = sys.stdin.readline
n, k = map(int, input().split()) #n는 수빈, k는 동생
max = 100000 #n,k <= 100000이기 때문에 최댓값을 잡아줍니다.
length = [0 for _ in range(max+1)] #최대값 내의 숫자만큼(100001개) length 배열을 생성
def bfs():
q = deque() # queue보다는 deque를 사용합시다.
q.append(n)
while q: #q에 체크할 위치가 남아있다면
temp = q.popleft()
if temp == k:
print(length[temp])
break
for j in (temp-1, temp+1, temp*2):
if 0 <= j <= max and not length[j]: # and문에서 범위 체크 먼저하는게 매우중요!!
length[j] = length[temp] + 1
q.append(j)
bfs()
BFS(breadth-first search) 문제네요.
수빈이가 서있는곳에서 -1, +1, x2인 위치들을 deque에 넣고 확인해 나가면 됩니다.
deque를 쓰는 이유는 queue 보다 효율적이여서겠죠?
deque가 생소하신 분들은 이 링크(https://ooeunz.tistory.com/31)를 참조하거나 따로 검색을 하셔서 공부를 해보시는 것을 추천합니다. popleft()를 사용할 수 있는 것이 queue와의 차이라고 할 수 있어요.
쉬운 문제지만 자유자재로 풀어나갈 때까지 계속 포스팅할게요. 피드백 감사합니다.