[백준/BOJ] 백준 10610번 : 30
2020. 6. 14. 02:47ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/10610
구하려는 수가 30의 배수라는 것에 초점을 두어야 한다.
30의 배수이려면, 일의 자리 수가 0이어야 하고, 각 자릿수의 합이 3의 배수여야 한다.
가장 큰 30의 배수는 이 조건을 만족하는 가장 큰 수이다.
코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
string input;
int sum = 0;
cin >> input;
//입력 받은 수를 오름차순으로 정렬뒤 뒤집어서 내림차순으로 정렬한다.
sort(input.begin(), input.end());
reverse(input.begin(), input.end());
//만약 끝에 '0'이 아니라면 '0'이 존재하지 않다는 의미이므로
//30의 배수로 만들 수 없다 그러므로 -1 출력
if (input[input.size() - 1] != '0')
cout << -1;
else
{
//각 자릿수의 합을 구한다
for (int i = 0; i < input.size(); i++)
sum += stoi(input.substr(i, 1));
//각 자릿수의 합이 3의 배수가 아니라면 30의 배수가 될 수 없으므로
//-1을 출력
if (sum % 3 != 0)
cout << -1;
//내림차순으로 정렬한 값을 출력한다
else
cout << input;
}
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 2557번 : Hello World (0) | 2020.06.16 |
---|---|
[백준/BOJ] 백준 1541번 : 잃어버린 괄호 (0) | 2020.06.15 |
[백준/BOJ] 백준 1000번 : A+B (0) | 2020.06.13 |
[백준/BOJ] 백준 1049번 : 기타줄 (0) | 2020.06.12 |
[백준/BOJ] 백준 1120번 : 문자열 (0) | 2020.06.11 |