문제:
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이라는 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.
미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.
입력:
N을 입력받는다. N은 최대 10^5개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.
출력:
미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.
풀이방법:
30의 배수가 되기 위해서는 10의 배수의 특징과 3의 배수 특징을 모두 가지고 있어야 한다. 10의 배수가 되려면 자릿수의 맨 끝이 0이 되어야 한다. 3의 배수가 되려면 각 자리를 다 더했을 때 3의 배수가 되어야 한다. 따라서 숫자에 0이 존재하고 각 자리를 모두 합했을 때 3의 배수라면 30의 배수를 만들 수 있다.
따라서 30의 배수중 가장 큰 수를 원하기 때문에 각 자리를 리스트의 원소로 가지고 있는 배열을 역순으로(내림차순으로) 정렬한 뒤에 붙이는 것이 가장 큰 값이 될 것이다.
1
2
3
4
5
6
7
8
9
|
number=list(map(int,list(input())))
answer=-1
if 0 in number:
if sum(number)%3 == 0:
number.sort(reverse=True)
answer=''
for i in number:
answer+=str(i)
print(answer)
|
cs |
문제링크:
'Algorithm > Python' 카테고리의 다른 글
[BOJ]1561. 놀이공원 (0) | 2019.09.20 |
---|---|
[BOJ]1080. 행렬 (0) | 2019.09.19 |
[BOJ]2875. 대회 or 인턴 (0) | 2019.09.17 |
[BOJ]1744. 수 묶기 (0) | 2019.09.16 |
[BOJ]14501. 퇴사 (0) | 2019.09.11 |