본문 바로가기
🥇Baekjoon Solutions/정수론

[C++] 백준 10610번: 30

by 코푸는 개발자 2021. 7. 26.
728x90

https://www.acmicpc.net/problem/10610

 

10610번: 30

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한

www.acmicpc.net

최초 풀이

전략

자리수가 10^6만큼이므로 숫자형 데이터타입이 아닌 문자열로 받아 각각의 자리수에 대한 조건을 따져준다.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void solve(string n) {
	vector<char>v;
	string ans = "";
	int total = 0;
	for (int i = 0; i < n.size(); i++) {
		v.push_back(n[i]);
		total += n[i] - '0';
	}

	sort(v.begin(), v.end());// 오름차순으로 정렬
	
	//30으로 나눠지는 수의 조건은 1의 자리가 0이면서 모든 자리수를 더한 값이 3으로 나눠져야한다.
	if (v[0] != '0' || total % 3 != 0) {// '-1'출력조건 : 30으로 나눠지지 않는 수
		cout << -1;
	}
	else {
		for (int i = v.size()-1; i>=0; i--)
			ans += v[i];//뒤로 추가됨
		cout << ans;
	}
}

int main() {
	string N;
	cin >> N;
	
	solve(N);

	return 0;
}
728x90

댓글