반응형
Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

UP

[백준 10610 : PYTHON] 30 본문

알고리즘/그리디

[백준 10610 : PYTHON] 30

cijbest 2020. 10. 18. 19:47

문제 풀기 : 10610번

 

10610번: 30

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한

www.acmicpc.net

문제

길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수 만든다.

단, 수가 존재하지 않으면 -1을 출력한다.

문제풀이

최적의 해를 구하는 그리디 문제이다.

숫자들의 위치를 바꿔서 30의 배수가 되는 수 중 가장 큰 수를 찾으면 된다.

30의 배수가 되려면

첫째, 마지막 자리수가 0이어야 한다.

둘째, 3의 배수는 각 자리의 숫자 합이 3으로 나누어 떨어진다.

코드 TIP

''.join(배열) : 배열을 문자열로 바꾼다.

sorted(변수, reverse=True) : 변수(문자열, 리스트 등)를 내림차순으로 정렬시킨다.

전체코드

# n : 입력받을 숫자
n = input()

# 숫자에 0이 없으면 30의 배수가 아니다.
if '0' not in n:
    print(-1)
else:
    sum = 0
    for i in n:
        sum += int(i)
    if sum % 3 == 0:
        # 내림차순 정렬
        print(''.join(sorted(n,reverse=True)))
    else:
        print(-1)
반응형
Comments