0보다 크거나 같고, 99보다 작거나 같은 정수 N이 주어졌을 때, N의 사이클의 길이를 구하는 문제이다. 사이클은 다음과 같은 과정을 수행한다.
- 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만든다.
- 각 자리의 숫자를 더한다.
- 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙여 새로운 수를 만든다.
- 사이클 수를 증가한다.
- 새로운 수와 주어진 수를 비교한다.
5-1. 같다면 반복을 종료하고, 사이클 수를 출력한다.
5-2. 다르다면 이전 과정을 다시 수행한다.
문제에서 주어진 로직대로 풀면 쉽게 풀린다. 하지만 1에서 "앞에 0을 붙여..."라는 말을 10, 20, ... , 90와 같이 주어진 수에 10을 곱해 두 자리 수로 만드는 것이라고 생각했다.
하지만 "앞에 0을 붙여..." 라는 말은 01, 02, ... , 09 형태로 만들라는 말이므로 이미 정수 형태인 수에 대해서는 이 작업을 따로 하지 않아도 된다.
문제를 정확히 이해하고 문제를 풀자!
int N = int.Parse(Console.ReadLine());
int n = N;
int count = 0;
while (true)
{
// 1. 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만든다.
// -> 01, 02, ... 09 형태로 만든다. 이미 정수 형태인 n에 대해선 이 작업을 하지 않아도 된다.
// -> 헷갈리지 않기!
// 2. 각 자리의 숫자를 더한다.
int temp = n / 10 + n % 10;
// 3. 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙인다.
n = (n % 10) * 10 + temp % 10;
// 4. 사이클 수를 증가한다.
count++;
// 5. 처음 수와 비교한다.
if (N == n) break;
}
Console.WriteLine(count);