※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts