※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 10610번 문제인 30이다.
문제는 아래 링크를 확인하자.

www.acmicpc.net/problem/10610

 

10610번: 30

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

www.acmicpc.net

이 문제는 주어진 수의 각 자리수를 재배열하여 30의 배수가 될 수 없다면 -1, 가능하다면 가능한 가장 큰 30의 배수를 출력하는 문제이다.

 

어떤 정수가 다음 두 조건을 만족하는 것과 30의 배수인 것은 필요충분조건이다.

1) 0으로 끝난다.

2) 모든 자릿수의 합이 3이다.

 

따라서, 주어진 숫자를 배열로 쓰면서 각 자릿수를 합해 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <algorithm>
#include <string>
using std::string;
using std::sort;
using std::cin; using std::cout;

char chr[100000];
string s;
int main()
{
    cin >> s;
    int slen = s.length();
    int m3chk = 0;
    for (int i = 0;i < slen;i++) {
        chr[i] = s[i];
        m3chk += s[i] - '0';
    }
    sort(chr, chr + slen);
    if (chr[0] != '0' or m3chk%3!=0) cout << -1;
    else {
        for (int i = slen - 1;i >= 0;i--) cout << chr[i];
    }
    return 0;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 1789 // C++] 수들의 합  (0) 2021.03.21
[BOJ 2563 // C++] 색종이  (0) 2021.03.20
[BOJ 1094 // C++] 막대기  (0) 2021.03.18
[BOJ 1476 // C++] 날짜 계산  (0) 2021.03.17
[BOJ 12728 // C++] n제곱 계산  (0) 2021.03.16

+ Recent posts