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의 사이클의 길이를 구하는 프로그램을 작성하시오.
첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.
첫째 줄에 N의 사이클 길이를 출력한다.
i=int(input()) #변수 i는 값을 입력받기 위한 변수이다.(문제의 N)
c=0 #변수 c는 사이클 길이를 출력하기 위한 변수이다.
num=i #num=i는 입력 받은 값을 저장하는 변수
while True:
sumNum=(num//10)+(num%10) #각 자리 숫자 더함
conNum=((num%10)*10)+(sumNum%10) #입력 받은 숫자의 오른쪽+합의 오른쪽 값
c+=1
if conNum==i: #새롭게 생성된 숫자와 입력 받은 숫자의 값이 동일하면 멈춤
break
num=conNum #while문 안 끝나면 다시 계산할 수 있도록 새롭게 생성된 숫자 저장
print(c)
문제에서 주어진 예시를 살펴보면
이러한 과정으로 새로운 숫자를 만드는 것을 알 수 있다.
따라서, 이러한 과정을 입력한 숫자인 26이 나올 때 까지 반복하면 된다.
코드에서 입력 받은 숫자의 각 자리 합을 구하는 부분은 다음과 같다.
sumNum=(num//10)+(num%10)
이 부분을 위의 예시로 살펴보면
(num//10)은 26 // 10(몫)으로 2
(num%10)은 26 % 10(나머지)으로 6 가 도출 되고 각 숫자를 더해 8이라는 값을 sumNum에 저장한다
다음은 입력받은 숫자의 1의 자리 수와 각 자리 합의 1의 자리수를 더해
새로운 숫자를 생성하는 부분이다.
conNum=((num%10)*10)+(sumNum%10)
((num%10)*10) 은 26의 나머지 6에 10을 곱해 60을 만들어주고
(sumNum%10)은 각 자리 합의 1의 자리수를 구한다. 즉, 8이다.
해당 값을 더하면 68이 새로운 숫자로 생성된다.
위와 같은 과정을 처음 입력 받은 숫자와 동일한 26이 나올 때까지 반복한다.
if conNum==i:
break
만약 입력한 숫자와 같은 숫자가 나온다면 while문을 중단 시킨다.
num=conNum
은 while문이 끝나지 않았을 경우, 새로운 숫자를 num변수에 대입해 다시 계산하도록 한다.