728x90
반응형
※ 문제링크
1697번: 숨바꼭질
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
해당 문제는 BFS를 활용하여 풀 수 있는 문제였다. BFS 구현을 위해 collections의 deque를 사용하였으며, 문제에서 주어진 이동조건을 구현하기 위해 간단하게 함수를 작성하였다. 자세한 풀이방법과 코드는 아래와 같다.
1. 입력받은 N값을 deque리스트에 삽입하여주고, 이미 방문한 숫자들을 제외하기위해 방문여부를 확인할 배열을 작성해준다.
2. 이동할 수 있는 경우는 기본적으로 3개이기에 deque활용하여 3개의 값을 구한 후 다시 queue에 넣어준다.
3. K의 값이 queue에 들어갈 때까지 반복문을 통해 조건을 반복해주고, 반복횟수를 카운트해준다.
4. K의 값이 queue에 있으면, 반복문을 중지하고 카운트한 값을 출력해준다.
from collections import deque
def walk_b(loc):
return (loc - 1)
def walk_f(loc):
return (loc + 1)
def teleport (loc):
return (2 * loc)
N, K = map(int, input().split())
queue = deque()
cnt = 0
check = [False] * 100001
queue.append(N)
def bfs():
for _ in range(len(queue)):
x = queue.popleft()
y1 = walk_b(x)
y2 = walk_f(x)
y3 = teleport(x)
if 0 <= y1 and check[y1] == False and 0 <= y1 <= 100000:
check[y1] = True
queue.append(y1)
if 0 <= y2 and x < K and check[y2] == False and 0 <= y2 <= 100000:
check[y2] = True
queue.append(y2)
if x < K and 0 <= y3 <= 100000:
check[y3] = True
queue.append(y3)
while K not in queue:
bfs()
cnt += 1
print(cnt)
P.S 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.
728x90
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 2206번 벽 부수고 이동하기 / 사용언어 : 파이썬(python) (0) | 2022.01.11 |
---|---|
[BOJ] 7562번 나이트의 이동 / 사용언어 : 파이썬(python) (0) | 2022.01.10 |
[BOJ] 7576번 토마토 / 사용언어 : 파이썬(python) (0) | 2022.01.09 |
[BOJ] 2178번 미로 탐색 / 사용언어 : 파이썬(python) (0) | 2022.01.07 |
[BOJ] 1012번 유기농 배추 / 사용언어 : 파이썬(python) (0) | 2022.01.06 |
댓글