백준 9047번: 6174 (C++)

2023. 2. 17. 17:05알고리즘/구현

https://www.acmicpc.net/problem/9047

 

9047번: 6174

입력은 표준입력(standard input)을 통해 받아들인다. 입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스마다 한 줄에 네 자리 수(1000~9999)가 하나씩 주어진다. 단,

www.acmicpc.net

 

풀이

단순한 구현 문제

6174가 나올 때 까지 while문을 돌려주면서 cnt를 하나씩 더해주었다.

 

4자리 숫자가 나오기 때문에 arr[4] 배열을 선언해서 한 자리씩 숫자를 넣어주고 정렬한 다음 

최솟값에는 0번부터 3번까지 차례대로 넣어주었고

최댓값에는 3번부터 0번까지 차례대로 넣어주었다. 

 

10을 곱해가며 자릿수를 늘려주면 최대 4자리의 최솟값과 최댓값이 된다.

 

전체 코드

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int T;
	int n;
	cin >> T;

	while (T--) {
		cin >> n;
		int cnt = 0;
		while (n != 6174) {
			int maxN = 0, minN = 0;
			int arr[4];
			for (int i = 0; i < 4; i++) {
				arr[i] = n % 10;
				n /= 10;
			}

			sort(arr, arr + 4);

			for (int i = 0; i < 4; i++) {
				minN *= 10;
				minN += arr[i];
				maxN *= 10;
				maxN += arr[3 - i];
			}

			n = maxN - minN;
			cnt++;
		}
		cout << cnt << '\n';
	}
}