문제링크 : https://www.acmicpc.net/problem/10610
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAX 987654321
#define pii pair <int, int>
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(0);
string S;
int sum = 0;
cin >> S;
sort(S.begin(), S.end(), greater<>());
if (S[S.length()-1] != '0') cout << -1; //마지막 수가 0이 아니라면
else
{
for(int i=0; i<S.size(); i++)
{
sum+=S[i]-'0'; //숫자로 더해줌
}
if(sum%3==0) cout << S; //30의 배수이므로 3으로 떨어진다면
else cout << -1;
}
return 0;
}
입력받은 숫자들을 활용하여 가장 큰 수이자, 30의 배수를 찾는 문제이다.
문자 문자열로 입력받고, 이를 가장 큰 숫자대로 정렬하려 수를 가장 크게 만들어준다.
이때 마지막 수가 0이 아니라면, 30의 배수가 아니기에 -1을 출력한다.
정렬한 문자열을 순서대로 숫자로 변환하여 더해주고, 더해준 숫자가 3으로 나누어 떨어지면 문자열을 출력하고 아니라면 -1을 출력한다.
여기서 30으로 나누어 떨어지는 것이 아니라, 3으로 떨어지는 것을 카운트하는 이유는, 앞서서 수의 맨마지막이 0인지 아닌지를 체크해줬기 때문이다.
'백준 > 실버' 카테고리의 다른 글
[백준 9465번] 스티커 (C++) (0) | 2023.04.18 |
---|---|
[백준 1817번] 짐 챙기는 숍 (C++) (0) | 2023.04.16 |
[백준 10025번] 게으른 백곰 (C++) (0) | 2023.04.08 |
[백준 21736번] 헌내기는 친구가 필요해 (C++) (0) | 2023.04.07 |
[백준 2512번] 예산 (C++) (0) | 2023.04.06 |