개발자 블로그

10610번 '30' 본문

알고리즘/백준

10610번 '30'

hayongwoon 2022. 7. 1. 12:21

문제 보기

 

10610번: 30

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

www.acmicpc.net

 

나의 풀이

n = list(input())

n.sort(reverse=True)

if int(n[-1]):
    print(-1)
else:
    s = sum([int(n[i]) for i in range(len(n))])
    if s % 3:
        print(-1)
    else:
        print(''.join(n))

3의 배수의 특징을 알면 풀이가 쉽다... 각 자리 수의 합이 3의 배수이라는 특징을 활용하자. 

1) 그 중 가장 큰 수를 구하기 위해 정렬 메소드를 사용. 

2) 문제에선 30의 배수를 찾는 거기 때문에 마지막에 0이 들어가있는지 일차적으로 검증 없으면 -1 

3) 0이 있으면 각 자리수 합과 3을 나눠 나머지가 0이면 된다! 

'알고리즘 > 백준' 카테고리의 다른 글

2667번 단지번호붙이기  (0) 2022.07.17
1406번 에디터  (0) 2022.07.05
2750번: 수정렬하기2  (0) 2022.07.04
13305번 주유소  (0) 2022.06.30
1931번: 회의실 배정  (0) 2022.06.28