본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 10610/c++] 30

by tokkiC 2022. 7. 1.

자료형의 표현 범위를 넘어선 거대한 수를 다룰때 string 을 써서 다뤄야 하는 법을 알려주는 문제였다

10^15 개의 자리수를 갖는 숫자라니 long long 으로도 표현불가하다. c++ 에서는 string 으로 다루자!

처음에 풀때는 각 자리의 조합을 바꿔서 3으로 나눌 수 있는 것들을 찾았지만

시간초과가 걸렸고 다음 방법으로 0을 제외한 2자리 3자리(2자리가 에러가 떠서...)가

3으로 나누어 떨어지는 경우의 수에서의 최대값을 구하려 했었지만... 

출력 오류가 떠서 다시 처음부터 로직을 생각해야만 했다

모든 자리수의 합이 3으로 나누어지는 경우가 조건이었다;;;

자고일어나서 생각하니 이렇게 간단하게 풀릴줄이야...

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

 

10610번: 30

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

www.acmicpc.net

 #include <bits/stdc++.h>
 using namespace std;
 
 int main(){
 	
 	string s;
 	long long sum=0;
 	int zcnt=0;
 	
 	cin >> s;
 	
 	for(int i=0; i<s.size(); i++){
	 sum+=s[i]-'0';
	 if(s[i]=='0')
		 zcnt++;
	 }
 	
 	if((zcnt!=0) && (sum%3==0)){
 		sort(s.begin(), s.end(), greater<int>());
	 	cout << s << "\n";
		 		
	 } else {
	 	cout << -1 << "\n";
	 }
 	return 0;
 }

댓글