알고리즘

[백준/그리디/C++] 10610번 30

데메즈 2022. 9. 22. 20:29
728x90
반응형

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

10610번: 30

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한

www.acmicpc.net

30의 배수일 조건
1. 10의 배수여야 한다
2. 3의 배수여야한다

#include <iostream>
#include <algorithm>

using namespace std;
string s;
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0); //속도 가속화
    cin >> s;

    sort(s.begin(), s.end(), greater<>()); //내림차순으로 정렬
    if(s[s.length()-1] != '0') // 맨 마지막 숫자가 0인지 확인 (10의 배수인지 확인)
        cout << -1;
    else{
        long long sum = 0;
        for(auto o : s){
            sum += o-'0';
        }
        if(sum%3 == 0) // 3의 배수인지 확인
            cout << s;
        else
            cout << -1;
    }

    return 0;
}
728x90
반응형