vidigummy KAU/알고리즘 공부(백준!)

BOJ 10610 (30)(그리디 알고리즘)

vidi 2020. 8. 24. 20:41

#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 연습용 문제처럼 보인다.