minhui study
백준 10610번 30 (python, c++) 본문
https://www.acmicpc.net/problem/10610
먼저 30배수의 조건을 알아보자
30의 배수는 맨 끝자리가 0이여야 하고 자리수를 다 더하면 3의 배수여야 한다.
1) 0이 없으면 -1을 반환해야 한다.
2) 각 자리수를 다 더해서 3의 배수가 아니면 -1을 반환해야 한다.
그리고 만약 30의 배수의 조건을 다 성립한다면 즉, 0도 있고 각 자리수를 다 더해서 3의 배수라면 가장 큰 수를 구해야 하므로 가장 큰 숫자가 앞 자리에 오게끔 내림차순으로 정렬을 하면 가장 큰 30의 배수를 구할 수 있다.
<python>
n=input()
sum=0
if '0' not in n:
print(-1)
else :
for i in n:
sum += int(i)
if sum % 3 != 0 :
print(-1)
else :
print(''.join(sorted(n,reverse=True)))
*sort와 sorted의 차이
- sort
: 원본 리스트를 정렬하되 반환 값은 None이다.
: 원본 리스트의 순서를 변경하고, 원본 리스트에 영향이 있다.
: 리스트 형에 한해서만 동작한다.
- sorted
: 정렬된 새로운 리스트를 반환한다. ( 원본 리스트에 영향이 없다. )
: 모든 iterable에 동작한다. (list, turple, dict, 문자열 등 )
<C++>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s;
int sum = 0;
cin >> s;
if (s.find('0') == string::npos) {
cout << -1;
}
else {
for (int i = 0; i < s.size(); i++) {
sum += s[i];
}
if (sum % 3 != 0) {
cout << -1;
}
else {
sort(s.begin(), s.end(), greater<int>());
cout << s;
}
}
}
'백준 문제풀이 > 그리디 알고리즘' 카테고리의 다른 글
백준 2875번 대회 or 인턴 (python) (0) | 2020.07.03 |
---|---|
백준 1541번 잃어버린 괄호 (python) (0) | 2020.06.01 |
백준 2217번 루프 (python, c++) (0) | 2020.06.01 |
백준 5585번 거스름돈 (python, c++) (0) | 2020.06.01 |
백준 1931번 회의실배정 (python, C++) (0) | 2020.05.25 |
Comments