백준 16953 A → B

김민영·2023년 1월 6일
0

알고리즘

목록 보기
35/125

과정

  • 목적 B부터 시작.
    • B가 2로 나누어떨어지면 B = B//2
    • B를 10으로 나누었을때 나머지가 1이면 (마지막 숫자가 1) 맨 뒤 숫자 떼기
  • 함수 중지 조건
    • B가 A 보다 작아지면 -1 출력
    • B가 2로 나누어떨어지지 않거나, 10으로 나눈 나머지가 1이 아니면 -1 출력
    • A == B면 실행 횟수 +1 출력
A, B = map(int, input().split())
ans = 0

def main(A, B):
    global ans
    if A == B:
        return
    elif B == 1:
        ans = -1
        return
    elif B % 2 == 0:
        B = B // 2
        ans += 1
        main(A, B)
    elif B % 10 == 1:
        B = B // 10
        ans += 1
        main(A, B)
    else:
        ans = -1
        return

main(A, B)
if ans == -1:
    print(ans)
else:
    print(ans + 1)
  • 함수를 재귀적으로 실행하는 방법 사용.
  • while문으로 정지 조건을 만족하지 않으면 계속 반복하는 방식이 좋을 것 같다.
profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글