[BOJ] 10610: 30

HJW·2022년 8월 25일
0
  • 어떤 수가 3의 배수가 되기 위해서는 모든 자리수을 더한 결과가 3의 배수여야 한다
  • 어떤 수를 섞어서 10의 배수가 되도록 만들기 위해서는 그 수가 0을 포함하고 있어야 한다
  • item not in list -> item이 list에 없을 때 True
  • list.sort() 오름차순 정렬
  • list.sort(reverse=True) 내림차순 정렬
  • list.pop(0) 리스트의 맨 앞 요소를 끄집어낸다(FIFO) 큐
  • print(n.pop(0), end='') 줄을 바꾸지 않고 출력
n = list(input())

# n의 요소들을 더하기 위한 변수
sum = 0

# 3의 배수인지를 판별하기 위해 각 자리수를 더한 sum을 구한다
for i in range(len(n)):
    sum += int(n[i])


# step1: n에 0이 없으면(정수 n을 섞어서 10의 배수를 만들 수 없다) -1을 출력한다
# step2: list n의 요소들을 모두 더한 결과가 3의 배수가 아니면 -1을 출력
# 어떤 숫자가 3의 배수가 되기 위해서는 모든 자리수를 더한 결과가 3의 배수가 되어야 한다.
if(('0' not in n) or ((sum % 3) != 0)):
    print('-1')

# 0을 찾아내고 내림차순으로 배열하기 위해서는 문자열 리스트를 정수 리스트로 바꾸어야 한다
for i in range(len(n)):
    n[i] = int(n[i])

# step3: 만들 수 있는 가장 큰 30의 배수를 만들기 위하여 n에 있는 0을 가장 마지막으로 배치한다
# 0을 가지고 있으면서 3의 배수인 경우에 구한다
if(0 in n and (sum % 3) == 0):
    for i in range(len(n)):
        if(n[i] == 0):
            # n[i]과 n[len(n)-1] 자리 switch
            dummy = n[i]
            n[i] = n[len(n)-1]
            n[len(n)-1] = dummy

    # step4: 오름차순으로 정렬하여 가장 큰 30의 배수를 만든다
    n.sort(reverse=True)

    for i in range(len(n)):
        print(n.pop(0), end ='')
profile
be passionate

0개의 댓글