[백준] 10610번 30 / C++

#문제

백준 10610번 30

#풀이

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	string n;
	cin >> n;

	if (n.find('0') == string::npos)
	{
		cout << "-1";
		return 0;
	}

	long long sum = 0;
	for (char digit : n)
	{
		sum += digit - '0';
	}

	if (sum % 3 != 0)
	{
		cout << "-1";
		return 0;
	}

	sort(n.rbegin(), n.rend());

	cout << n;

	return 0;
}

#정리

입력받는 n에 포함되는 수를 섞어 30의 배수가 되는 가장 큰 수를 만들어 출력하는 문제. 만약 30의 배수가 되지 않으면 “-1”을 출력한다. 일단 30의 배수가 되는 조건을 고려한다. 숫자 전체의 합이 3의 배수여야 하며, 숫자에 0이 하나 이상 포함되어있어야 한다. 먼저 0이 있는지 체크하고, 없으면 “-1”을 출력하여 종료. 있다면 모든 숫자의 합을 구하고 3으로 나눈 값을 확인한다. 0이 아니라면 “-1”을 출력하고 종료. 0이라면 n을 내림차순으로 정렬하고(가장 큰 수여야 하니까) 출력하여 해결.




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • [백준] 9613번 GCD 합 / C++
  • [백준] 1748번 수 이어 쓰기 1 / C++
  • [백준] 1302번 베스트셀러 / C++
  • [백준] 11656번 접미사 배열 / C++
  • [백준] 1764번 듣보잡 / C++