알고리즘/문제 풀이

1110번: 더하기 사이클

Themion 2021. 12. 6. 22:52

https://www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

수 N을 다음 수로 만드는 법은 다음과 같다.

우선 수 N의 10의 자리 수 N / 10과 1의 자리 수 N % 10을 구하고, 이 둘을 더해 10으로 나눈 나머지를 구한다.

이는 ( N / 10 + N % 10 ) % 10으로 나타낼 수 있으며, 이 수를 다시 1의 자리 수에 10을 곱한 (N % 10) * 10에 더하면 사이클의 다음 수를 구할 수 있다.

#include <cstdio>

// cont[N]: N이 사이클에 포함되어 있는지 검사
bool cont[100];

int main() {
    // N: 사이클의 다음 수를 계산
    // ans: 출력할 사이클의 수를 저장한다
    int N, ans = 1;

    // 사이클의 첫 수를 입력받아 cont에 저장
    scanf("%d", &N);

    // 사이클에 포함된 수를 발견할 때까지 무한반복
    do {
        // N이 사이클에 등장했으므로 cont에 표시
        cont[N] = true;
        // 사이클에 포함될 수를 생성
        N = (N / 10 + N % 10) % 10 + (N % 10) * 10;
        // 생성된 수가 사이클에 없다면 ans에 1 추가
        ans += !cont[N];
    } while (!cont[N]);

    // 사이클의 크기는 ans과 같으므로 ans을 출력한다
    printf("%d\n", ans);

    return 0;
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

1152번: 단어의 개수  (0) 2021.12.07
1149번: RGB거리  (0) 2021.12.06
1107번: 리모컨  (0) 2021.12.06
1100번: 하얀 칸  (0) 2021.12.06
1094번: 막대기  (0) 2021.12.06