S E P H ' S

[코딩풀이] - BAEKJOON.1110 더하기 사이클 본문

Algorithm/BackJoon

[코딩풀이] - BAEKJOON.1110 더하기 사이클

yoseph0310 2020. 10. 6. 22:07

문제 1110.더하기 사이클


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

26 부터 시작한다. 2+6=8이다. 새로운 수는 68이다. 6+8=14이다. 새로운 수는 84이다. 8+4=12이다. 새로운 수는 42이다. 4+2=6이다. 새로운 수는 26이다.

  위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

N이 주어졌을 때, N의 사이클 길이를 구하는 프로그램을 작성하시오.


  입력 조건

  1. 첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

 

   문제와 조건에 따라서 26을 입력 받는다면 26의 10의 자리 수와 1의 자리 수를 더하고 그 더한 값을 새로운 변수에 저장한다. 또한 새로운 변수에 저장한 값을 10의 자리수와 1의 자리 수로 나누어서 이전 수의 1의 자리수에 10을 곱하여 더하면 새로운 수를 구할 수 있다. 이를 반복하여 출력되는 새로운 수가 입력값과 같아질때 까지의 사이클을 구해야 하므로, 반복이 될 때마다 1이 증가하는 변수를 만든다. 또한, 입력값과 새로운 수를 반복하여 비교해야 하므로 입력값을 다른 변수에 저장하고 그 변수와 새로운 수를 비교하면 된다. 코드는 다음과 같다.

Input = int(input())
num = Input
N = 0
while True:
    tenN = Input // 10
    oneN = Input % 10
    hapN = tenN + oneN
    newN = (oneN * 10) + (hapN % 10)
    Input = newN
    N += 1
    if newN == num:
        break
print(N)