풀이
30의 배수는 끝자리가 0으로 끝남과 동시에 3의 배수여야 합니다.
즉 입력된 수의 각 자릿수에 0이 하나라도 존재해야 하고,
각 자릿수를 모두 더한 합이 3의 배수여야 합니다.
두 조건을 충족한다면 입력된 수의 각 자릿수를 큰 숫자부터 출력해주면 됩니다.
#include<iostream>
using namespace std;
int main(void)
{
int cnt[10] = { 0, };
string s; cin >> s;
int len = s.length();
int sum = 0;
for (int i = 0; i < len; i++) {
cnt[s[i] - '0']++;
sum += (s[i] - '0');
}
if (cnt[0] == 0 || sum % 3 != 0) cout << -1;
else {
for (int i = 9; i >= 0; i--) {
for (int j = 0; j < cnt[i]; j++) {
cout << i;
}
}
}
return 0;
}
반례
Input
302
Output
-1
Input
903
Output
930
Input
9876543210
Output
9876543210
Input
1231231231231230
Output
3333322222111110
'알고리즘 > 백준' 카테고리의 다른 글
[백준/C,C++] 1850번: 최대공약수 (0) | 2021.04.20 |
---|---|
[백준/C,C++] 5585번: 거스름돈 (0) | 2021.04.20 |
[백준/C,C++] 2875번: 대회 or 인턴 (0) | 2021.04.20 |
[백준/C,C++] 1041번: 주사위 (0) | 2021.04.20 |
[백준/C,C++] 1059번: 좋은 구간 (2) | 2021.04.20 |
댓글