본문 바로가기

백준/C++

[C++] 백준 10610번 - 30

728x90

 

문제 10610번

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

 

30의 배수가 되려면 3의 배수 + 10의 배수여야 한다. 각 자리를 다 더해 3으로 나눠 떨어지면 3의 배수이고 맨 마지막 자리가 0이면 10의 배수이다.그래서 숫자의 개수를 알아내기 위해 문자열로 받아 해당 값들에 '0'을 빼 int형으로 만든 후 벡터에 넣어준다. 가장 큰 수를 만들어야하기 때문에 내림차순으로 정렬하고 check변수를 이용하여 30의 배수인지 알아낸다. check변수에 각 숫자들을 다 더해 나온 값이 3의 배수이거나 10의 배수이면 -1을 출력하고, 아니면 30의 배수라는 뜻이기 때문에 벡터에 들어있는 값을 출력한다.

 

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

vector <int> v;
string s;

int main() {
    cin >> s;
    
    for (int i = 0; i < s.length(); i++) {
        //char형에서 '0'을 빼서 int형으로
        v.push_back(s[i] - '0');
    }

    sort(v.begin(), v.end(), greater<>());
    int check = 0;
    for (int i = 0; i < s.length(); i++) {
        check += v[i];
    }

    if (check % 3 != 0|| v[v.size() - 1] != 0) {
        cout << -1;
    }
    else {
        for (auto x : v) {
            cout << x;
        }
    }

    return 0;
}

 

 

728x90