10610
백준 10610번
Link: 10610번: 30
문제 설명
예전에 실패했던 문제여서 다시한번 풀어본 문제.
너무 허무할정도로 쉽게 답이 나와버려서 이걸 도대체 왜 못풀었을까 하는 생각이 들게 하는 문제였다.
우선 인풋을 string 형태로 받고, 각 자리수를 모두 더해 3의 배수가 되는지 확인한다. 이때 0의 갯수를 세주는 작업도 같이 한다.
작업 중 0이 아닌 숫자를 만날 경우 벡터에 넣는다.
반복문을 한번 돌고 나서, 벡터를 정렬한다. 내림차순으로 정렬되므로 끝에서부터 쭉 결과값을 담을 string에 넣는다.
만약 인풋으로 들어온 숫자가 3의 배수가 아니거나 0을 포함하지 않았다면 -1을 출력하고, 그렇지 않을 경우 만든 string을 출력하면 풀린다.
에전이랑 생각하는게 많이 달라졌나보다. 이런문제도 못풀었나 하는 생각이 들 정도면.
그동안 많이 발전했다는 기분에 뿌듯하네ㅋㅋㅋㅋ
정답 코드
//
// Created by Keith_Lee on 02/04/2019.
//
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
string num;
cin >> num;
int zeroCount = 0;
long long digitSum = 0;
vector<int> numbers;
for(int i=num.length()-1; i>=0; i--){
if(num[i] - '0' == 0){
zeroCount++;
}
else{
numbers.push_back(num[i] - '0');
digitSum += num[i] - '0';
}
}
sort(numbers.begin(), numbers.end());
string result;
if(zeroCount > 0 && digitSum % 3 == 0){
for(int i=numbers.size()-1; i>=0; i--){
result.push_back(numbers[i] + '0');
}
for(int i=0; i<zeroCount; i++){
result.push_back('0');
}
cout << result << '\n';
}
else{
cout << -1 << '\n';
}
return 0;
}