본문 바로가기

알고리즘/백준

[BOJ 10610] 30 (배수판정법 참고)

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