https://www.acmicpc.net/problem/1110
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 =
www.acmicpc.net
문제
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의 사이클 길이를 출력한다.
while문을 이용해 원래 수로 돌아올 때까지 반복하며 문제에서 제시한 것처럼 새로운 수를 만들어준다.
반복할 때마다 cnt로 횟수를 카운트하고
원래 수와 새로 만든 수가 같다면 반복문을 빠져나와 cnt 반복 횟수를 출력해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
int a=n/10;
int b=n%10;
int cnt=1;
while(true){
int m=(b*10)+((a+b)%10);
a=m/10;
b=m%10;
if(m==n)
break;
cnt++;
}
printf("%d\n",cnt);
}
|
'C++ > 백준' 카테고리의 다른 글
[C++][백준][정렬] 1213번 팰린드롬 만들기 (0) | 2020.02.25 |
---|---|
[C++][백준][정렬] 1181번 단어 정렬 (0) | 2020.02.24 |
[C++][백준][정렬] 1026번 보물 (0) | 2020.02.24 |
[C++][백준][DFS] 1012번 유기농 배추 (0) | 2020.02.24 |
[C++][백준] 1008번 A/B (0) | 2020.02.24 |