반응형
문제 설명
입출력 예제
풀이 코드
이 문제는 딱 보고 BFS 문제다라고 생각하진 못했지만
너비 우선 탐색 알고리즘 카테고리를 풀고 있기 때문에 BFS로 문제를 풀어 보았다.
- 큐에 연산을 통해 값이 변할 a와 첫 연산 횟수 1을 튜플로 묶어 추가해준다.
- 큐가 빌 때 까지 a의 뒤에 숫자 1을 추가한 수와 a * 2를 한 수를 추가하여 연산 횟수를 하나씩 올린다.
- 만약 a의 수가 b보다 크면 다음 큐를 꺼내어 확인한다.
- a와 b가 같다면 연산횟수 cnt를 출력하고 종료한다.
- 큐가 빌때 까지 a와 b가 같지 않다면 -1을 출력한다.
아래의 사진은 a : 2 , b : 162 일 때 bfs를 통해 나온 (a, cnt) 값들이다.
처음에는 a > b 일 때 continue를 하지 않아 정답과 다른 값이 나왔는데 이 로그를 찍어보고
a > b 일 때 continue를 추가해야함을 깨닫게 되었다.
정답 코드
from collections import deque
import sys
input = sys.stdin.readline
a, b = map(int, input().split())
def bfs(a, b):
q = deque()
q.append((a, 1))
while q:
a, cnt = q.popleft()
if a > b:
continue
if a == b:
print(cnt)
break
q.append((int(str(a) + "1"), cnt + 1))
q.append((a * 2, cnt + 1))
else:
print(-1)
bfs(a, b)
'◼ 코딩테스트 > DFS,BFS' 카테고리의 다른 글
[Python/파이썬] 백준 5014 - 스타트링크 (0) | 2023.06.06 |
---|---|
[Python/파이썬] 백준 1697번 - 숨바꼭질 (0) | 2023.06.04 |
[Python/파이썬] 백준 13460 - 구슬 탈출2 (0) | 2023.06.02 |
[Python/파이썬] 백준 16234 - 인구 이동 (0) | 2023.05.30 |
[Python/파이썬] 백준 13549 - 숨바꼭질3 (0) | 2023.05.25 |