상세 컨텐츠

본문 제목

10610. 30

알고리즘/백준

by 아리따운노을 2020. 2. 1. 15:31

본문


요즘 한국사 시험을 준비하고 있어서 블로그를 신경 많이 못썼다. 더 열심히 써야겠다.



시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초256 MB144285076397934.836%

문제

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

미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.

입력

N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.

출력

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








코드

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
33
34
#include <iostream>
using namespace std;
 
 
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    string N;
    int temp=0;
    cin>>N;
    int check[10]={0,};
    for(int i=0;i<N.length();i++)
    {
        check[N[i]-'0']++;
        temp+=N[i]-'0';
    }
    if(temp%3==0&&check[0]>0)
    {
        for(int i=9;i>=0;i--)
        {
            if(check[i]>=0)
                while(check[i]--)
                {
                    cout<<i;
                }
        }
    }
    else
        cout<<-1;
    return 0;
}
 
cs

인풋의 N의 길이가 10^5라고 했으므로 string으로 인풋을 받아야 한다.
가장 큰 수를 만들기 위해 각 수가 몇 개인지 체크하는 check 배열을 하나 선언.
받은 string을 각 숫자가 몇 개인지 체크하고 30으로 나눠지는지 체크하기 위해 temp에 그 수를 각각더함
정수는 각 자리수를 더해 3으로 나누어 떨어지면 그 수는 3의 배수인 성질을 가지고 있다.
그걸 이용해서 3으로 나누어 떨어지고 0이 1개 이상 존재하면 그 수는 30의 배수인 것이다.

그걸 이용해서 안되면 바로 -1을 출력하도록 한다.
만약 3으로 나누어 떨어지고 0의 개수가 1개 이상이라면
가장 큰 수부터 있는 개수대로 출력한다. 



'알고리즘 > 백준' 카테고리의 다른 글

2798. 블랙잭  (0) 2020.02.12
17070. 파이프 옮기기 1  (0) 2020.02.11
7576. 토마토  (0) 2020.01.20
2749. 피보나치 수 3  (0) 2020.01.19
9020. 골드바흐의 추측  (0) 2020.01.19

관련글 더보기

댓글 영역