※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 9047번 문제인 6174이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/9047
9047번: 6174
입력은 표준입력(standard input)을 통해 받아들인다. 입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스마다 한 줄에 네 자리 수(1000~9999)가 하나씩 주어진다. 단,
www.acmicpc.net
Kaprekar's routine을 구현해보는 문제이다.
Kaprekar's routine을 진행시키기 위해 먼저 작업할 수를 문자열로 바꾸고, 이 문자열 내의 각 자릿수를 정렬시키자.
또한, 이 수를 뒤집은 수를 만들어 주어진 수의 각 자리로 만들 수 있는 가장 큰 네 자리 수와 작은 네 자리수를 구하자.
이제 두 수의 차를 새 작업할 수로 저장하면 한번의 Kaprekar's routine을 실행한 것이 된다.
위 과정에서, 작업할 수가 1000보다 작은 경우 해당 수를 문자열로 만들 때 leading zero를 채워넣어야 함에 유의하자.
Kaprekar's routine에 대한 내용은 이 글에 적어두었으니 관심이 있다면 읽어보자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int T; cin >> T;
while (T--) {
int x; cin >> x;
int cnt = 0;
while (x != 6174) {
string xx = to_string(x);
while (xx.length() != 4) xx = "0" + xx;
sort(xx.begin(), xx.end());
string y = xx;
reverse(y.begin(), y.end());
x = abs(stoi(y) - stoi(xx));
cnt++;
}
cout << cnt << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 5626 // C++] 제단 (0) | 2022.05.30 |
---|---|
[BOJ 9084 // C++] 동전 (0) | 2022.05.29 |
[BOJ 4641 // C++] Doubles (0) | 2022.05.29 |
[BOJ 9046 // C++] 복호화 (0) | 2022.05.29 |
[BOJ 4589 // C++] Gnome Sequencing (0) | 2022.05.29 |