Algorithm/📖Baekjoon
#10610 30
yewoneeee
2022. 4. 28. 20:14
# 문제
# 입력 및 출력
# 풀이
저번에 봤던 문젠데 뭔소린지 이해가 안가서 안풀었었다ㅋㅋㅋ
다시 보니까 숫자를 하나하나 잘라서 30 배수를 만들라는 소리였다,,
일단 30의 배수가 되려면 3, 2, 5를 소인수로 가지고 있어야한다
맨 뒤가 0이 되면 2, 5의 배수인건 확실하니까 3만 해결되면 된다
3의 배수인지 확인하기 위해선 모든 자리수를 더해서 3의 배수가 되는지 보면 된다
조건 1) 주어진 숫자 중에 0이 존재하는지
조건 2) 주어진 숫자를 전부 더하면 3의 배수가 되는지
그리고 30의 배수중 가장 큰 수를 구하라고 했으니까 위의 두 조건을 만족하는지 확인하고
된다면 각 숫자를 내림차순 정렬하면 되고, 안된다면 -1을 출력하면 됨
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
bool compare(char a, char b) {
return a > b;
}
int main() {
int check = 0, exist = 0;
string inp;
cin >> inp;
for (int i = 0; i < inp.size(); i++) {
int tmp = (int)inp[i] - 48;
if (!tmp) exist = 1;
check += tmp;
}
if (!exist || check % 3 != 0) {
cout << -1 << endl;
return 0;
}
sort(inp.begin(), inp.end(), compare);
cout << inp << endl;
}
내가 쓴 코드가 이건데 다른 사람 코드를 보니까 compare함수를 새로 만드는 대신 greater<>()를 사용하더라
코드를 줄이기 위해 greater를 사용해서 다시 제출해봄
아래 블로그 참고
https://atomic0x90.github.io/c++/2020/02/22/c++-sort.html
atomic0x90(Yujun Han)
c와 c++ 를 사용하는 방법 설명 / 백준 온라인 저지 문제 풀이를 설명 / 나만의 프로그래밍 개발 일지 / 개발하면서 알게되는 것들을 저장하는 공간
atomic0x90.github.io
*그리고 char을 int로 변경하면 아스키코드값으로 변경되므로 0의 아스키코드값인 48을 빼줘야 숫자가 나옴
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main() {
int check = 0, exist = 0;
string inp;
cin >> inp;
for (int i = 0; i < inp.size(); i++) {
int tmp = (int)inp[i] - 48;
if (!tmp) exist = 1;
check += tmp;
}
if (!exist || check % 3 != 0) {
cout << -1 << endl;
return 0;
}
sort(inp.begin(), inp.end(), greater<>());
cout << inp << endl;
}