문제
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의 사이클 길이를 출력한다.
문제 풀이
더하기 사이클은 구현 문제이므로 주어진 문제를 그대로 구현해내면 되는 문제입니다.
저는 입력 정수를 String으로 여겨 풀이하려 하였으나, 시간 초과로 정답으로 인정받지 못했습니다.
따라서 더하기 사이클 문제는 입력을 int로 해결하기 위해 수학적으로 접근해야 합니다.
문제에 주어진 예를 생각해보면 26이 입력되었을 때, 다음 수는
(26의 1의 자릿수인 6) + (2와 6의 합인 8) 입니다.
따라서 먼저 숫자를 자릿수로 구분하기 위해 10으로 나눠주어야 합니다.
즉, 첫번째 수는 26을 10으로 나눈 몫인 2이고
두번째 수는 26을 10으로 나눈 나머지인 6이 됩니다.
각 자릿수로 나눈 수를 저장한 뒤 두 수를 더하면 8이 됩니다.
68을 만들어야 하므로 6에 다시 10을 곱하고 (10의 자리 만들기 위해)
8에 10을 나눠 (1의 자리 만들기 위해) 더해줍니다.
이 과정이 모두 끝나면 1 Cycle이 완료 된 것이므로 count를 세어줍니다.
68부터 다시 위 과정을 반복해줍니다.
만약, Cycle을 수행하며 만들어진 수가 처음 입력 정수 N과 같아지면
반복문을 빠져나와 Cycle을 count한 값을 출력해줍니다!
My code
n = int(input())
total = n # 처음 입력 정수를 초기값으로 설정
count = 0 # Cycle을 count 할 변수
while True:
a = total // 10 # n의 첫번째 수
b = total % 10 # n의 두번째 수
sum_value = a + b # 각 자릿수를 더한 값
# b를 10의 자릿수, sum_value를 1의 자릿수로 만든값으로 갱신
total = (b * 10) + (sum_value % 10)
count += 1 # 1 Cycle 종료되었으므로 cycle값 count
if total == n: # 처음 입력한 정수와 값이 같으면 반복문 종료
break
print(count)
'백준(Python) 풀이' 카테고리의 다른 글
백준 1238번. 파티 (Python / 파이썬) (0) | 2022.04.06 |
---|---|
백준 1916번. 최소비용 구하기 (Python / 파이썬) (0) | 2022.04.06 |
백준 1920번. 수 찾기 (Python / 파이썬) (0) | 2022.04.06 |
백준 11399번. ATM (Python / 파이썬) (0) | 2022.04.06 |
백준 2839번. 설탕배달 (Python / 파이썬) (0) | 2022.04.06 |
댓글