10610

백준 10610번

Link: 10610번: 30


문제 설명

예전에 실패했던 문제여서 다시한번 풀어본 문제.

너무 허무할정도로 쉽게 답이 나와버려서 이걸 도대체 왜 못풀었을까 하는 생각이 들게 하는 문제였다.

우선 인풋을 string 형태로 받고, 각 자리수를 모두 더해 3의 배수가 되는지 확인한다. 이때 0의 갯수를 세주는 작업도 같이 한다.

작업 중 0이 아닌 숫자를 만날 경우 벡터에 넣는다.

반복문을 한번 돌고 나서, 벡터를 정렬한다. 내림차순으로 정렬되므로 끝에서부터 쭉 결과값을 담을 string에 넣는다.

만약 인풋으로 들어온 숫자가 3의 배수가 아니거나 0을 포함하지 않았다면 -1을 출력하고, 그렇지 않을 경우 만든 string을 출력하면 풀린다.

에전이랑 생각하는게 많이 달라졌나보다. 이런문제도 못풀었나 하는 생각이 들 정도면.

그동안 많이 발전했다는 기분에 뿌듯하네ㅋㅋㅋㅋ


정답 코드

//
// Created by Keith_Lee on 02/04/2019.
//

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(){
    string num;
    cin >> num;

    int zeroCount = 0;
    long long digitSum = 0;
    vector<int> numbers;

    for(int i=num.length()-1; i>=0; i--){
        if(num[i] - '0' == 0){
            zeroCount++;
        }
        else{
            numbers.push_back(num[i] - '0');
            digitSum += num[i] - '0';
        }
    }

    sort(numbers.begin(), numbers.end());

    string result;
    if(zeroCount > 0 && digitSum % 3 == 0){
        for(int i=numbers.size()-1; i>=0; i--){
            result.push_back(numbers[i] + '0');
        }
        for(int i=0; i<zeroCount; i++){
            result.push_back('0');
        }

        cout << result << '\n';
    }
    else{
        cout << -1 << '\n';
    }

    return 0;
}