어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.
미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.
N을 입력받는다. N는 최대 10*5개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.
미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.
10의 배수가 되려면 0이 가장 마지막에 와야 하지만 어차피 순서대로 나열해도 0은 마지막이다.
총합이 3의 배수인지 확인할 수 있는 입력 예시가 없는 걸로 보아 일부러 그랬다. 합리적 의심이다.
#include <iostream>
#include <string>
using namespace std;
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int arr[10] = { 0, };
string s;
cin >> s;
int sum_of_number = 0;
for (int i = 0; i < s.size(); i++){
int number = s[i] - '0';
sum_of_number += number;
arr[number]++;
}
if (arr[0] == 0 || sum_of_number % 3!= 0) cout << -1;
else {
string answer = "";
for (int i = 9; i >= 0; i--){
int count = arr[i];
for (int j = 0; j < count; j++) {
answer += to_string(i);
}
}
cout << answer;
}
}