on my way
[GDSC Week1-2] 백준 10610번:: 30 (C++) 본문
반응형
* 생각한 아이디어 및 문제 풀이
입력받은 수에 0이 없으면 -1을 출력한다.
수를 정수로 입력받으면 각 값을 받고 벡터를 넣을 때 나머지나 몫을 구해야할 것 같아서 그냥 문자열로 받아야 된다고 생각했다.
출력값은 내림차순으로 정렬한다.
그러나 도저히 아이디어가 떠오르지 않아서 찾아보니,
30의 배수가 되는 조건은 반드시 끝자리가 0이고, 모든 자리의 수를 더하면 3배수라는 것을 알게 되었다.
* 코드
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char const *argv[]){
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
string N;
long long sum=0;
bool flag = false;
vector<int> v;
cin >> N;
for(int i=0; i<N.length(); i++){
int n = N[i]-'0';
if (n == 0) flag = true;
sum += n;
v.push_back(n);
}
if (!flag || (sum % 3 != 0)) {
cout << "-1";
}
else {
sort(v.begin(), v.end(), greater<>());
for(auto& i :v){
cout << i;
}
}
}
* 문제 링크
https://www.acmicpc.net/problem/10610
* 회고
다른 사람과의 코드와 비교를 하는 과정에서 string도 vector처럼 sort가 가능하다는 것을 알게 되었다.
그래서 string으로도 문제를 풀이해보았다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, char const *argv[]){
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
string N;
long long sum=0;
bool flag = false;
cin >> N;
for(int i=0; i<N.length(); i++){
int n = N[i]-'0';
if (n == 0) flag = true;
sum += n;
}
if (!flag || (sum % 3 != 0)) cout << "-1";
else {
sort(N.begin(), N.end(), greater<>());
for(auto& i :N){
cout << i;
}
}
}
string으로 바로 푸니 메모리와 시간이 더 짧게 잡혔다.
반응형
'algorithm > C++' 카테고리의 다른 글
[GDSC Week1-4] 백준 1448번:: 삼각형만들기 (C++) (0) | 2021.10.03 |
---|---|
[GDSC Week1-3] 백준 11582번:: 치킨 TOP N (C++) (0) | 2021.10.03 |
[GDSC Week1-1] 백준 11931번:: 수정렬하기4 (C++) (0) | 2021.10.03 |
[GDSC Week0-3] 백준 1547번:: 공 (C++) (0) | 2021.09.26 |
[GDSC Week0-2] 백준 10804번:: 카드역배치 (C++) (0) | 2021.09.26 |