Algorithm

[알고리즘] 백준 10610번_30 문제풀이 (Python 파이썬)

seunkorea 2023. 7. 17. 16:13

 

 

10610번: 30

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

www.acmicpc.net

문제상황

입력받은 숫자를 배열해서 30의 배수가 되는 가장 큰 수를 만든다.

 

구하고자 하는 것

30의 배수가 되는 가장 큰 수 (없으면 -1)

 

입력

0으로 시작하지 않는 최대 10^5개의 숫자로 구성된  N

 

IDEA

30의 배수 = 3의 배수 * 10의 배수 로 나눠서 생각해보면

내가 입력받은 수에 0이 있어야지 10의 배수를 만족할 수 있다.
또한 3의 배수가 될 조건각 자리의 숫자를 모두 더했을 때 3의 배수이면 3의 배수

 

  • 30의 배수를 판단하는 과정에서 숫자 자체로 다루기 보다는 각 숫자 자릿수를 개별적으로 판단하므로 문자열로 처리
  • 입력받은 숫자 문자열의 각 자릿수를 숫자형 리스트로 저장 후 내림차순 정렬
  • 가장 마지막 요소가 0이면 3의 배수임을 체크 (리스트의 모든 요소의 합이 3으로 나눠떨어지는가)
  • 3의 배수라면 리스트에 저장된 값을 차례로 이어붙혀서 출력

 

Code

N = input()

ls = [int(i) for i in N]
ls.sort(reverse=True)


if ls[-1] != 0:
  print(-1)
elif sum(ls) % 3 != 0:
  print(-1)
else :
  print(''.join([str(i) for i in ls]))