[백준/C#] 1110번 더하기 사이클

dev.hyeon·2022년 7월 13일
0

알고리즘

목록 보기
17/44
post-thumbnail

1110번 더하기 사이클

풀이

0보다 크거나 같고, 99보다 작거나 같은 정수 N이 주어졌을 때, N의 사이클의 길이를 구하는 문제이다. 사이클은 다음과 같은 과정을 수행한다.

  1. 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만든다.
  2. 각 자리의 숫자를 더한다.
  3. 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙여 새로운 수를 만든다.
  4. 사이클 수를 증가한다.
  5. 새로운 수와 주어진 수를 비교한다.
    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);

0개의 댓글