알고리즘/Python

[python] 백준 10610 - 30

제주도랏맨 2022. 3. 17. 13:10

출처 : 백준, https://www.acmicpc.net/problem/10610

 

10610번: 30

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

www.acmicpc.net

 

더보기

 

풀이

 

if __name__ == '__main__':
  n = list(input())

  if '0' not in n:
    print(-1)
  elif sum(map(int, n)) % 3 != 0:
    print(-1)
  else:
    print(''.join(sorted(n, reverse = True)))

 

30의 배수이려면

 

1. 3의 배수이면서

2. 10의 배수이면 된다.

 

3의 배수이기 위한 조건은 숫자를 구성하는 모든 숫자를 합했을 때 3의 배수이면 되고,

10의 배수는 숫자에서 0이 들어가있으면 10의 배수로 만들 수 있으므로,

이 두 조건을 체크한 후 아니라면 -1을 return하고 맞다면 역정렬해서 붙여 return한다.

 


 

시간 복잡도

 

O(nlogn)

 

다른 사람의 풀이를 보면서 알게 된 점

 

-

 

고찰

 

고찰은 아닌데 이거 말고 한 문제를 3일 동안 붙잡고 있는 중인데 미칠 것 같다.

아직 브론즈.........