티스토리 뷰
728x90
https://www.acmicpc.net/problem/16953
- 문제 :
정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
- 2를 곱한다.
- 1을 수의 가장 오른쪽에 추가한다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.
- 풀이 :
주어진 수에서 2를 곱하거나 1을 가장 오른쪽에 추가하는 모든 경우를 BFS로 탐색하여 최소횟수를 구한다.
- 소스코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
def bfs(A,B):
queue = []
queue.append([A])
cnt = 0
while queue[-1]:
queue.append([])
for i in queue[cnt]:
if i == B:
return cnt+1
if i*10 + 1 <= B:
queue[-1].append(i*10+1)
if i*2 <= B:
queue[-1].append(i*2)
cnt+=1
return -1
if __name__ == "__main__":
A,B = map(int,input().split())
print(bfs(A,B))
|
cs |
320x100
'Algorithm > DFS & BFS' 카테고리의 다른 글
(Python) - BOJ(21736번) : 헌내기는 친구가 필요해 (2) | 2022.02.16 |
---|---|
(Python) - BOJ(17086번) : 아기 상어 2 (0) | 2022.02.15 |
(Python) - BOJ(16928번) : 뱀과 사다리 게임 (0) | 2022.02.15 |
(Python) - BOJ(16236번) : 아기 상어 (0) | 2022.02.14 |
(Python) - BOJ(15591번) : MooTube(Silver) (0) | 2022.02.10 |
댓글
© 2022 WonSeok, All rights reserved