30의 배수가 되기 위한 조건을 찾아야 하는데,
쉽지 않아서 구글링을 했다.
3의 배수들의 공통점은 각 자리수의 합이 항상 3의 배수를 이룬다는 것이다.
3 * 78 = 234
2 + 3 + 4 = 9
4의 배수나, 7의 배수는 그렇지 못한데 신기하게 3의 배수는 위의 특징이 있다.
1 ~ 10의 배수들은 모두 배수판정법이 있더라.
배수판정법을 Divisibilty Rules이라고 부른다.
유사한 문제가 나오면, 이 자료를 바탕으로 문제를 해결하면 될 거 같다. 수학적 기본 지식이 필요한 문제다.
30의 배수는, 3의 배수와 10의 배수의 특징을 가지면 된다.
가장 큰 수는, 모든 문자를 넣은 다음에 정렬한 후 출력하면 된다.
해설코드(C++).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
string N;
vector<int> v;
int main() {
cin >> N;
bool flag = false;
long long sum = 0;
for(int i = 0; i < N.length(); i++)
{
if(N[i] == '0')
flag = true;
sum += (N[i] - '0');
v.push_back((N[i] - '0'));
}
if(sum % 3 == 0 && flag){
sort(v.begin(), v.end());
for(int i = v.size() - 1; i >= 0; i--)
cout << v[i];
cout << endl;
}else
cout << -1 << endl;
return 0;
}
|
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ 2503] 숫자 야구 (0) | 2020.06.01 |
---|---|
[BOJ 10448] 유레카 이론 (0) | 2020.05.31 |
[BOJ 2217] 로프 (0) | 2020.05.30 |
[BOJ 2602] 돌다리 건너기 (0) | 2020.05.28 |
[BOJ 11399] ATM (0) | 2020.05.25 |