GitHubSeob

C++ / 백준 / 10610 / 30 본문

Baekjoon/Silver

C++ / 백준 / 10610 / 30

GitHubSeob 2021. 9. 2.

문제

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

 

10610번: 30

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한

www.acmicpc.net

문제풀이

30의 배수이기 때문에 끝자리는 무조건 0이다.

0을 제외하고 3의 배수가 되는지만 확인하면 되는 문제이다.

3의 배수가 되는 조건은 각 자리의 숫자들의 합이 3의 배수일 때이다.

따라서 각 자리 숫자들을 더한 합이 3의 배수이고, 숫자들 중에 0이 하나 이상 있는지만 판별하면 된다.

 

코드

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	string N = "";
	cin >> N;

	int sum = 0;
	for (int idx = 0; idx < N.size(); ++idx)
		sum += N[idx] - '0';

	sort(N.begin(), N.end(), greater<>());

	if (N[N.size() - 1] != '0' || sum % 3 != 0)	cout << -1;
	else cout << N;

}