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

+ Recent posts