728x90
https://www.acmicpc.net/problem/10610
문제 요약
입력받은 값으로 만들어낼 수 있는 수가 30의 배수라면 그중 가장 큰 값을, 배수가 아니라면 -1을 출력하라.
접근법
문제 분류를 보면 정수론이라고 되어있습니다.
위키 피디아에 따르면 '정수론(整數論, 영어: number theory) 또는 수론(數論)은 수학의 한 분야로, 각종 수의 성질을 대상으로 한다' 라는 군요.
30의 특성을 파악해봅시다.
30은 일단 뒤에 0이 없으면 안 되겠군요.
if 0이 없다면:
print(-1)
0이 있다고 하면 다음을 생각해봅시다.
저는 3의 배수의 성질을 몰라서 헤맸습니다.
예를 들어서 123이라는 값이 있으면 얘로 여러 가지 만들 수 있잖아요?
123 132 213 231 321 312 이런식으로요.
그런데 저는 저렇게 나열하면 다 3의 배수가 아닐 때도 있지 않을까라는 생각을 했습니다.
결론은 아닙니다.
각 자릿수를 다 더한 결과가 3의 배수면 그 수는 3의 배수라고 합니다.
즉 어떤 조합을 해도 다 3의 배수다~
가장 큰 수?? 내림차순으로 정렬만 하면 된다~ 가 되겠습니다.
python 소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
|
N = input()
if N.find('0') == -1:
print(-1)
else:
sum = 0
for i in N:
sum+=int(i)
if sum%3 !=0:
print(-1)
else:
N = sorted(N, reverse=True)
print(''.join(N))
|
cs |
마무리에 print(N)을 하면 특유의 ['2','1','0'] 이런 식으로 출력이 됩니다.
string형이니까 당연한 거지만... 우리가 원하는 형태로 출력해주기 위해 join을 사용했어요.
728x90
'알고리즘 > ps' 카테고리의 다른 글
[python] 백준 1946 신입사원 (0) | 2021.01.04 |
---|---|
[python] 백준 9020 골드바흐의 추측 (0) | 2020.08.02 |
[python] BOJ - 2217 로프 (0) | 2020.07.13 |
[python] 프로그래머스 - 체육복 (0) | 2020.07.06 |
[python] 프로그래머스 - 완주하지 못한 선수 (0) | 2020.07.05 |