https://www.acmicpc.net/problem/10610
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
가장 먼저 입력받은 문자열에 문자마다
-'0'을 하여 정수형으로 바꿔주고 int 형 배열에 넣어주었다.
그리고 가장 큰 수를 만들기 위해 내림차순으로 배열을 정렬한 후,
배열에 있는 값을 다 더하고 이것이 3의 배수이면서 마지막 숫자가 0이라면
30의 배수이기 때문에 그 배열을 차례로 출력하였고,
만약 아니라면 -1을 출력해주었다.
문자열 길이만큼의 크기를 가진 정수형 배열을 선언하기 위해
new를 사용하여 동적 할당을 하였다.
그리고 문자를 정수형으로 바꾸기 위해 '0'을 빼주었으며,
30의 배수 조건은 다 더한 값이 3의 배수 & 마지막이 0으로 끝난다는 것이 중요하다고 생각한다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
string s;
cin >> s;
int len = s.length();
int sum = 0;
int *s_arr = new int[len];
for (int i = 0; i < len; i++)
{
s_arr[i] = s[i] - '0';
}
sort(s_arr, s_arr + len);
reverse(s_arr, s_arr + len);
for (int i = 0; i < len; i++)
{
sum += s_arr[i];
}
if (sum % 3 == 0 && s_arr[len-1] == 0)
{
for (int i = 0; i < len; i++)
{
cout << s_arr[i];
}
} else cout << -1;
delete[] s_arr;
return 0;
}
'코딩테스트 > Baekjoon' 카테고리의 다른 글
[백준 #2562] 최댓값 (node.js) (0) | 2022.05.10 |
---|---|
[백준 #16953] A → B (C++) (0) | 2022.03.19 |
[백준 #11047] 동전 0 (C++) (0) | 2022.03.16 |
[백준 #1158] 요세푸스 문제 (C++) (0) | 2022.02.15 |
[백준 #10825] 국영수 (C++) (0) | 2022.02.11 |