문제 요약
30을 굉장히 좋아하는 미키코인지 뭔지가 길 바닥에서 양수 n을 발견했다. 이 때, N을 조합하여 만들 수 있는 가장 큰 30의 배수를 출력하는 문제.(만들 수 없을 때는 -1을 출력)
풀이
30의 배수는
1. 맨 마지막 자리가 0이도
2. 각 자리수를 모두 합하면 3의 배수가 된다.
라는 특징을 이용한다.
또한 N이 10^5개의 숫자 즉, 숫자의 갯수가 10^5개라는 어마무시하게 큰 숫자이므로 문자열을 이용해 N을 받는다.
코드
#include <iostream>
#include <list>
#include <string>
#include <algorithm>
using namespace std;
int main(){
int n, sum =0;
list<int> lst;
string s;
cin>>s;
sort(s.begin(), s.end(),greater<>());
if(*(--s.end()) == '0'){
for(auto& o:s){
sum += o-'0';
}
if(sum%3 ==0)
cout<<s;
else
cout<<-1;
}
else
cout<<-1;
}
끝