반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

16953 A->B 본문

코딩 테스트(Python)/백준, 프로그래머스

16953 A->B

5_hyun 2022. 1. 14. 01:36
반응형

https://www.acmicpc.net/problem/16953

 

16953번: A → B

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

www.acmicpc.net

 

내가 풀었던 풀이(47%까지 맞았었는데 2줄 바꾸고 정답 맞춤)

a, b = map(int, input().split())
count = 0

while(b >= 1):
    if(b%2 != 0):
        b -= 1
        b = b / 10
        count += 1
        if(b == a):
            print(count + 1)
            break
    elif(b %2 == 0):
        b = b / 2
        count += 1
        if(b == a):
            print(count + 1)
            break
else:
    print(-1)

b가 b >= 1면 계속 수행한다.

b가 짝수가 아닌 경우: 처음엔 b = b//10으로 했지만 만약 b가 23인 경우엔 -1이 나와야하는데 그렇지 않다. 그래서 b -= 1, b = b / 10로 하니까 된다. 그래서 b==a가 되면 종료하고 출력한다.

b가 짝수인 경우: 계속 나누기 2를 한다.

 

deque를 이용한 풀이법

from collections import deque 

a, b = map(int, input().split()) 
res = -1 
que = deque([(a, 1)])#a가 2면, 덱에 2와 1이 있다.
while que:
    i, cnt = que.popleft() #왼쪽 값을 빼고싶으면 popleft()
    if i == b:
        res = cnt 
        break
    
    if i*2 <= b: #2로 곱하는 경우
        que.append((i*2, cnt+1))
    if int(str(i)+'1') <= b: #뒤에 1을 추가하는 경우
        que.append((int(str(i)+'1'), cnt+1)) 
print(res)

 

-2 162를 입력했을때 나오는 첫 결과

if문을 2개다 만족해서 2가지를 다 한 경우가 모두 deque에 들어간다.

 

-그 다음 while문

deque에 들어갔던 값을 돌리면 3가지의 경우가 나오게된다.

그러다가 i가 162가 된다면 종료를 한다.

반응형

'코딩 테스트(Python) > 백준, 프로그래머스' 카테고리의 다른 글

1049 기타줄  (0) 2022.01.16
1543 문서검색  (0) 2022.01.16
1439 뒤집기  (0) 2022.01.13
1541 잃어버린 괄호  (0) 2022.01.12
4797 캠핑  (0) 2022.01.11
Comments