1. 배수판정법

2. 30 의 배수인지 체크 (모든 자리수의 합이 3 의 배수 & 0이 있어야 됨)

3. greedy 한 문제여서 되면 큰 값을 출력하면 정답

4. 시간제한 조심 (정렬이 필요없다. 4ms 로 풀림)

#include <cstdio>
#include <string.h>
/**
* https://www.acmicpc.net/problem/10610
* BOJ 백준온라인져지 10610 30 풀이
*/
using namespace std;
int main () {
char stringNumber[100002];
int number[10];
int sum = 0;
scanf("%s", stringNumber);
int size = strlen(stringNumber);
for (int i = 0; i < size; i++) {
int n = stringNumber[i] - '0';
number[n]++;
sum += n;
}
if (sum % 3 == 0 && number[0]) {
for (int i = 9; i >= 0; i--)
while (number[i]) {
printf("%d", i);
number[i]--;
}
} else printf("-1");
}
view raw BOJ_10610.cpp hosted with ❤ by GitHub


문제

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

미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라. (그 수가 존재한다면)

입력

N을 입력받는다. N는 최대 10^5개의 숫자로 구성되어 있다.

출력

미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.


+ Recent posts