10610) 30

경지현·2023년 8월 10일

algorithm_study

목록 보기
13/21

문제 요약

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;
    
}

profile
그냥 사람

0개의 댓글