https://www.acmicpc.net/problem/16953
16953번: A → B
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
www.acmicpc.net
내 풀이
from collections import deque
import sys
input = sys.stdin.readline
def solution():
n,m = map(int,input().split())
q = deque([(n,1)])
while q:
a,b = q.popleft()
if a == m:
print(b)
break
if a * 2 <= m:
q.append((a*2,b+1))
if int(str(a)+'1') <= m:
q.append((int(str(a)+'1'),b+1))
else:
print(-1)
solution()
문제 자체는 매우 평이한데 while else 문을 처음으로 써봐서 기록 차원에서 남겨본다.
While ~ else 문은
For ~ else 문과 동일한 방법으로 작동한다.
즉 while문에서 참인 동안은 While 문을 실행하다가
거짓인 조건이되면 else 를 실행한다
a=1
while (a<10):
print('a < 10')
a+=1
else:
print('a>10')
요런 문장에서 결과값은 아래와 같다.
a < 10
a < 10
a < 10
a < 10
a < 10
a < 10
a < 10
a < 10
a < 10
a>10
다른사람의 풀이
import sys
from collections import deque
input = sys.stdin.readline
def solution(a, b):
q = deque([(a, 1)])
while q:
a, cnt = q.popleft()
if a == b:
print(cnt)
return
if a * 2 <= b:
q.append((a * 2, cnt + 1))
if a * 10 + 1 <= b:
q.append((a * 10 + 1, cnt + 1))
print(-1)
a, b = map(int, input().split())
solution(a, b)
https://velog.io/@joniekwon/Python-백준-16953번-A-B
[Python] 백준 16953번: A → B
https://www.acmicpc.net/problem/16953 A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값 출력. 만들 수 없으면 -1 출력
velog.io
'취준 > 백준' 카테고리의 다른 글
1912(연속합) - 파이썬 (0) | 2022.10.18 |
---|---|
2589(보물섬) - 파이썬 (0) | 2022.09.02 |
1389 - 파이썬 (0) | 2022.08.23 |
13460 - 파이썬 (0) | 2022.08.22 |
11725 - 파이썬 (0) | 2022.08.17 |