[백준] 10610번 30 / C++
#문제
#풀이
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
string n;
cin >> n;
if (n.find('0') == string::npos)
{
cout << "-1";
return 0;
}
long long sum = 0;
for (char digit : n)
{
sum += digit - '0';
}
if (sum % 3 != 0)
{
cout << "-1";
return 0;
}
sort(n.rbegin(), n.rend());
cout << n;
return 0;
}
#정리
입력받는 n에 포함되는 수를 섞어 30의 배수가 되는 가장 큰 수를 만들어 출력하는 문제. 만약 30의 배수가 되지 않으면 “-1”을 출력한다. 일단 30의 배수가 되는 조건을 고려한다. 숫자 전체의 합이 3의 배수여야 하며, 숫자에 0이 하나 이상 포함되어있어야 한다. 먼저 0이 있는지 체크하고, 없으면 “-1”을 출력하여 종료. 있다면 모든 숫자의 합을 구하고 3으로 나눈 값을 확인한다. 0이 아니라면 “-1”을 출력하고 종료. 0이라면 n을 내림차순으로 정렬하고(가장 큰 수여야 하니까) 출력하여 해결.
Enjoy Reading This Article?
Here are some more articles you might like to read next: