728x90
문제 10610번
https://www.acmicpc.net/problem/10610
30의 배수가 되려면 3의 배수 + 10의 배수여야 한다. 각 자리를 다 더해 3으로 나눠 떨어지면 3의 배수이고 맨 마지막 자리가 0이면 10의 배수이다.그래서 숫자의 개수를 알아내기 위해 문자열로 받아 해당 값들에 '0'을 빼 int형으로 만든 후 벡터에 넣어준다. 가장 큰 수를 만들어야하기 때문에 내림차순으로 정렬하고 check변수를 이용하여 30의 배수인지 알아낸다. check변수에 각 숫자들을 다 더해 나온 값이 3의 배수이거나 10의 배수이면 -1을 출력하고, 아니면 30의 배수라는 뜻이기 때문에 벡터에 들어있는 값을 출력한다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
vector <int> v;
string s;
int main() {
cin >> s;
for (int i = 0; i < s.length(); i++) {
//char형에서 '0'을 빼서 int형으로
v.push_back(s[i] - '0');
}
sort(v.begin(), v.end(), greater<>());
int check = 0;
for (int i = 0; i < s.length(); i++) {
check += v[i];
}
if (check % 3 != 0|| v[v.size() - 1] != 0) {
cout << -1;
}
else {
for (auto x : v) {
cout << x;
}
}
return 0;
}
728x90
'백준 > C++' 카테고리의 다른 글
[C++] 백준 11652번 - 카드 (0) | 2024.05.12 |
---|---|
[C++] 백준 9946번 - 단어 퍼즐 (0) | 2024.05.11 |
[C++] 백준 2075번 - N번째 큰 수 (0) | 2024.05.08 |
[C++] 백준 11651번 - 좌표 정렬하기 2 (0) | 2024.05.07 |
[C++] 백준 11650번 - 좌표 정렬하기 (0) | 2024.05.06 |