https://www.acmicpc.net/problem/10610
방법 1 : 내림차순 정렬
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// 입력
string num;
cin >> num;
// 내림차순 정렬
sort(num.begin(), num.end(), [](char A, char B) {
return A > B;
});
// 각 자리숫자의 합 구하기
int sum = 0;
for (int i = 0; i < num.size(); ++i)
{
sum += num[i] - '0';
}
// 합이 3으로 나누어 떨어지지 않거나, 맨 뒷자리가 0이 아니면 실패
if (sum % 3 != 0 || num.back() != '0')
{
cout << -1;
}
else
{
cout << num;
}
return 0;
}
방법 2: 들어온 숫자의 개수를 저장하여 역순으로 출력
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// 입력 - 숫자가 들어온 횟수를 nums벡터에 카운팅
vector<int> nums(10);
char c;
int sum = 0;
while ((c = getchar()) != '\n')
{
++nums[c - '0'];
sum += c - '0';
}
// 합이 3으로 나누어 떨어지지 않거나, 0이 하나도 없으면 실패
if (sum % 3 != 0 || nums[0] == 0)
{
cout << -1;
}
else
{
// 큰 숫자부터 들어온 횟수만큼 출력
int idx = 9;
while (idx >= 0)
{
while (nums[idx]-- > 0)
{
cout << idx;
}
--idx;
}
}
return 0;
}
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다.
미르코는 30이란 수를 존경하기 때문에,
그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.
N에 포함된 숫자 일부만 선택해도 될줄 알았는데
그게 아니라 N에 포함된 숫자 전체를 이용해야 하는 문제였다.
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ]12919번: A와 B 2 (c++) (0) | 2020.06.26 |
---|---|
[BOJ] 1783번: 병든 나이트 (c++) (0) | 2020.06.26 |
[BOJ]2875번: 대회 or 인턴 (c++) (0) | 2020.06.26 |
[BOJ]1744번: 수 묶기 (c++) (0) | 2020.06.26 |
[BOJ]1541번: 잃어버린 괄호 (c++) (0) | 2020.06.26 |
댓글