728x90
문제 1110번
https://www.acmicpc.net/problem/1110
일단 원래 숫자를 origin변수에 저장해둔다. 그리고 반복문을 돌릴 때 n이 원래 숫자랑 같지 않을 때까지 반복해준다. 여기서 그냥 while문을 사용한다면 바로 반복문을 빠져나오게 되기 때문에 1번은 무조건 실행하고 조건문을 확인하는 do~while문을 사용해준다. 다음의 일의 자리에 있던 숫자를 십의 자리로 표현해주기 위해 n을 10으로 나눈 나머지에 10을 곱해준다. 여기에 n의 십의 자리와 일의 자리를 더한 값의 일의 자리를 더해줘야한다. 이 값을 구하기 위해 n에서 10을 나눈 몫과 n에 10을 나눈 나머지를 더한 후 10을 나눈 나머지를 구한다.
이렇게 두 수를 더한 값을 n에 업데이트해주고, 사이클을 돌았다는 의미로 count해준다. 그렇게 이 n과 원래 숫자 origin과 같아질 때 반복문을 빠져나와 count를 출력해주면 원하는 값을 얻을 수 있다.
#include <iostream>
using namespace std;
int main() {
int n, count = 0;
cin >> n;
int origin = n;
do {
n = ((n % 10) * 10) + (((n / 10) + (n % 10)) % 10);
count++;
} while (origin != n);
cout << count;
return 0;
}
728x90
'백준 > C++' 카테고리의 다른 글
[C++] 12015번 - 가장 긴 증가하는 부분 수열 2 (0) | 2024.05.27 |
---|---|
[C++] 백준 1357번 - 뒤집힌 덧셈 (0) | 2024.05.26 |
[C++] 백준 16496번 - 큰 수 만들기 (0) | 2024.05.25 |
[C++] 백준 1292번 - 쉽게 푸는 문제 (0) | 2024.05.24 |
[C++] 백준 2805번 - 나무 자르기 (0) | 2024.05.22 |