수학을 약간 첨가한 문제이다. 30의 배수이려면 3의 배수이면서 동시에 10의 배수이면 된다.
3의 배수임을 확인하는 방법은 각 자리를 더한 합이 3의 배수이면 된다.
10의 배수는 맨 뒤 숫자가 0이면 된다.
숫자 자리가 총 10^5까지기 때문에 string으로 받아야한다.
받은 값을 내림차순 정렬한다. (0이 뒤에 와야되기 때문)
각 자리를 더한 합이 3의 배수인지 확인한다.
맨 뒤자리가 0인지 확인한다.
둘다 해당된다면 30의 배수이므로 출력한다.
//백준 10610, 30
#include <iostream>
#include <algorithm>
#include <vector>
std::vector<int> num;
int main(){
std::string s;
std::cin >> s;
for(int i{0}; i<s.size(); ++i){
num.push_back(s[i] - '0');
}
std::sort(num.rbegin(), num.rend());
int sum{0};
for(int i{0}; i<num.size(); ++i){
sum += num[i];
}
if(sum % 3 != 0) std::cout << -1;
else if(num[num.size()-1] != 0) std::cout << -1;
else{
for(auto c : num) std::cout << c;
}
return 0;
}