danbibibi
article thumbnail
Published 2023. 12. 11. 17:00
BOJ 9047번: 6174 문제 풀이/백준

문제

문제 바로가기> BOJ 9047번: 6174

 

9047번: 6174

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

www.acmicpc.net

 

풀이 1

타입을 문자열과 정수로 변환해가며 풀었다!

이때 정수 -> 문자열로 변환하는 과정에서 0089 같은 것이 나올 수 있으므로 자리 수를 맞춰주는 연산을 추가로 진행해주었다.

이런 과정을 거치지 않으려면, 풀이2와 같은 방법으로 풀 수도 있다.

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#define SIZE 4
using namespace std;

int main(){
    int TC; cin >> TC;
    while(TC--){
        string N; cin >> N;
        int ans = 0, maxVal, minVal, diff = stoi(N);
        
        while (diff != 6174){
            vector<char> v;
            string minStr="", maxStr="";

            for(char c : N) v.push_back(c);
            sort(v.begin(), v.end());
            for(int i=0; i<SIZE; i++){
                minStr = minStr + v[i];
                maxStr = maxStr + v[SIZE-i-1];
            }
            minVal = stoi(minStr);
            maxVal = stoi(maxStr);
            diff = maxVal - minVal;
            N = to_string(diff);
            while(N.size() < SIZE) N = "0" + N;
            
            ans++;
        }
        cout << ans << "\n";
    }
}

 

풀이 2

문자열을 사용하지 않고, %와 /를 통해 각 자리 수를 구해서 문제를 해결할 수 있다!

#include <iostream>
#include <algorithm>
#define SIZE 4
using namespace std;

int TC, N;

int kaprekar(int num){
    int arr[SIZE];

    for (int i = 0; i < SIZE; i++){
        arr[i] = num % 10;
        num /= 10;
    }
    sort(arr, arr + SIZE);
    return (arr[3]*1000 + arr[2]*100 + arr[1]*10 + arr[0]) - (arr[0]*1000 + arr[1]*100 + arr[2]*10 + arr[3]);
}

int main(){
    cin >> TC;
    while(TC--){
        cin >> N;

        int ans=0, num = N;
        while (num != 6174){
            num = kaprekar(num);
            ans++;
        }

        cout << ans << "\n";
    }
}

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 8983번: 사냥꾼  (0) 2023.12.22
BOJ 1079번: 쇠막대기  (0) 2023.12.15
BOJ 2304번: 창고 다각형  (0) 2023.09.05
BOJ 17485번: 진우의 달 여행 (Large)  (0) 2023.09.04
BOJ 2230번: 수 고르기  (0) 2023.09.03
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로