문제
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 값을 반환합니다.
-끝-
'작업 > Problem Solving' 카테고리의 다른 글
백준 5543(상근날드) 파이썬(python) 해결 (0) | 2020.07.22 |
---|---|
백준 10039(평균 점수) 파이썬(python) 해결 (0) | 2020.07.22 |
백준 10951(A+B -4) 파이썬(python) 해결 (0) | 2020.07.21 |
백준 10871(X보다 작은 수) 파이썬(python) 해결 (0) | 2020.07.21 |
백준 2439(별 찍기 -2) 파이썬(python) 해결 (0) | 2020.07.21 |