본문 바로가기
작업/Problem Solving

백준 1110(더하기 사이클) 파이썬(python) 해결

728x90

문제

 

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보다 작거나 같은 정수이다.

 

 

 

#백준 1110
def cycle(number):
    count = 0 #사이클 길이
    sum = 0 #앞뒤 수 합
    Fnumber = number #사이클 시작을 위한 값

    while True:
		# // 소수점 이하를 버리는 나눗셈
        sum = Fnumber//10 + Fnumber%10 
        Snumber = (Fnumber%10)*10 + sum%10 #새로운 수 생성
        Fnumber = Snumber #다음 사이클을 위함
        count += 1
       
        if Snumber == number:
            break

    return count


num = int(input()) 

print(cycle(num))

 

함수 만들기를 적용하여 해결해 보았습니다.



26을 입력 값으로 시작합니다. cycle()의 인자 number로 26이 대입됩니다.
Fnumber는 26을 가집니다.

 


반복문 내부에서 sum은 2와 6의 합 8을 가집니다.

 


Snumber는 Fnumber%10인 6에 10을 곱한 60과 sum%10인 8의 합인 68을 가집니다.

 


Fnumber는 Snumber인 68을 새로 가지며 다음 반복에 사용됩니다.



위의 과정을 통해 사이클을 한 번 돌았기 때문에
사이클 수를 계산하는 count에 1을 더합니다.



이 과정을 계속하면 Snumber와 number가 일치하는 경우가 생기며
그때 while 반복을 종료 후 count 값을 반환합니다.

 

 

-끝-

 

 

728x90