#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
string input;
cin >> input;
int a = 0, where;
bool b = false;
vector<int> arr;
for (int i = 0; i < input.length(); i++)
{
a += input[i] - 48;
arr.push_back(input[i] - 48);
if (input[i] == '0')
{
b = true;
where = i;
}
}
if (a % 3 == 0 && b == true)
{
int tmp = input[input.length() - 1] - 48;
arr[where] = tmp;
arr[input.length() - 1] = 0;
sort(arr.begin(), arr.end()-1, greater<int>());
for (int i = 0; i < input.length(); i++)
{
cout << arr[i];
}
return 0;
}
else
{
cout << -1;
return 0;
}
}
4문제? 5문제 정도 풀었지만 아직도 그리디 알고리즘이 무엇을 뜻하는지 모르겠다. 탐욕스러운 알고리즘. 그러니까 그 때 그 때 좋아 보이는 것을 선택하는 알고리즘이라고 하긴 하는데 특히 이 문제에서는 그런 특성이 전혀 보이지 않았다. 30의 배수는 3의 배수의 요건을 충족하고 마지막에 0만 있으면 되니까 그것만 보면 된다. 그냥 STL 연습용 문제처럼 보인다.
'vidigummy KAU > 알고리즘 공부(백준!)' 카테고리의 다른 글
코테 준비반 2일차 (프로그래머스 고득점 KIT 완전 탐색 (모의고사, 소수 찾기, 카펫)) (0) | 2020.08.31 |
---|---|
오늘은 프로그래머스를 했다.(고득점 KIT 정렬) (0) | 2020.08.30 |
BOJ11724(연결요소의 개수) (0) | 2020.07.31 |
그래프 (BFS, DFS 구현) (0) | 2020.07.30 |