Baekjoon

Baekjoon 10610번 30

ppwag 2021. 3. 21. 21:53

문제

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

걸린 시간

-

풀이

C++

#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

bool compare(int i, int j){
    return i > j;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    string s;
    cin >> s;
    if(s.find('0') == string::npos){
        cout << -1;
        return 0;
    }
    int sum = 0;
    vector<int> ans;
    for(char c : s){
        int n = c-'0';
        sum += n%3;
        ans.push_back(n);
    }
    if(sum%3 != 0){
        cout << -1;
        return 0;
    }
    else{
        sort(all(ans), compare);
        for(int i : ans) cout << i;
    }
    return 0;
}

설명이 불친절한 문제. 주어진 수에 포함된 숫자들을 섞어 30 의 배수가 되는 가장 큰 수를 만드는 문제이다. '섞어' 라는 단어에 숫자를 모두를 포함한다는 의미가 함축되어 있었다.

각 자리수를 3으로 나눈 나머지의 합이 3으로 나누어 떨어진다면, 전체수도 3의 배수라는 특징을 찾아내면 쉽게 해결할 수 있다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 1744번 수 묶기  (0) 2021.04.18
Baekjoon 9663번 N-Queen  (0) 2021.04.14
Baekjoon 8682번 Happy monkey  (0) 2021.03.21
Baekjoon 17087번 숨바꼭질 6  (0) 2021.03.21
Baekjoon 16508번 전공책  (0) 2021.03.08

댓글