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 |