개발 공부/알고리즘 문제풀이

[백준] 1110. 더하기 사이클

5묘 2022. 7. 15. 23:00
 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net


# 1110 더하기 사이클

def cycle(N) :
    A = N // 10
    B = N % 10
    new_N = ((B % 10) * 10) + ((A + B) % 10)
    return new_N

origin = int(input())
num = origin
count = 0

while True:
    ret = cycle(num)
    count += 1

    if ret == origin:
        print(count)
        break
    else:
        num = ret

입력값 중 뒤의 숫자, 그리고 입력값의 합의 뒤의 숫자를 활용해 새로운 숫자를 만들어 그 수가 원래 수(origin)과 같아질 때까지의 사이클 수를 구하는 문제.

이건 사실 입력값을 문자열로 받아서 하는 것이 더 간편했을 것 같은데(나중에 문자열로 다시 해보자!), 일단 이번에는 숫자 계산으로 해결했다. 새로운 수를 만드는 식을 cycle() 함수로 따로 만들어서 무한 루프 while 문 안에 넣고, return 값이 origin 숫자와 같아지면 break 하도록 설정했다.

처음에는 count를 global 변수로 cycle 함수 내에 넣어줬는데, 그랬더니 원인을 알 수 없는 버그로 수가 갑자기 늘어나서, global 변수는 함부로 사용하는 것이 아니라는 교훈을.. 얻었다.(ㅋㅋㅋ)