[Greedy] 16953번 - A → B(51일차)

bob.sort·2021년 8월 4일
0
post-thumbnail
#코드 실행 시간 단축
import sys
input = sys.stdin.readline

#숫자 A,B 입력
A, B = map(int, input().split())
#숫자 B를 원형 유지 복사
num = B
#최소 횟수에 1을 더해야 하므로 1부터 시작
cnt = 1

while True:
    #역순 탐색으로 A를 찾았을 때 횟수를 출력, 루프 탈출
    if(num == A):
        print(cnt)
        break
    #역순 탐색 후 A를 만들지 못했을 때 -1 출력, 루프 탈출
    elif(num < A):
        print(-1)
        break
    #A를 찾지 못했을 때
    else:
        #횟수를 더함
        cnt += 1

        #숫자를 2로 나눈 몫과 나머지를 계산
        num_m = num // 2
        num_e = num % 2

        #나머지가 1이면, -1 이후 10으로 나눈 값으로 업데이트
        #이때, 마지막 숫자가 1 or 짝수가 아니면 결과적으로 A를 만들 수 없음
        if(num_e == 1):
            num = (num-1) / 10
        #나머지가 0이면, 몫으로 업데이트
        else:
            num = num_m   

#인사이트
#역순으로 탐색하는 방법을 떠올린 것은 좋았음
#나누기 연산을 할때는 그 경우의 수를 모두 고려해야 함
profile
Interest in Computer Graphics and Computer Vision

0개의 댓글