알고리즘

[백준, 파이썬, 10610번] 30

hminor 2023. 10. 4. 10:46

 

풀이

 

  • 해당 문제를 처음 접했을 때 순열로 해서
  • 현재 n으로 받은 숫자의 모든 숫자를 조합해서
  • 30의 배수가 되는지 확인해보는 것으로 이해했기에
  • 분명히 메모리랑, 시간이 부족할 것 같은데
  • 우선은 그렇게 적용하여 제출했지만 역시나 메모리 초과... (아래 두 번째 코드)
  • 그래서 뭐 어쩌라는거지 싶어서
  • 그냥 만들 수 있는 가장 큰 수가 30으로 나누어 떨어지는지 해보니까
  • 됨... 어이... 핳

 

정답 코드

import sys
input = sys.stdin.readline
n = sorted(list(input().rstrip('\n')),reverse=True)
if '0' in n:
    result = ''
    for i in n: result += i
    print(-1) if int(result)%30 else print(int(result))
else: print(-1)

 

메모리 초과 코드

import sys
from itertools import permutations
input = sys.stdin.readline
n = sorted(list(input().rstrip('\n')),reverse=True)
if '0' in n:
    n.remove('0')
    for i in (sorted(set(list(permutations(n,len(n)))),reverse=True)):
        result = ''
        for j in i:
            result += j
        if int(result)%30:
            print(int(result)*10)
            sys.exit(0)
    print(-1)
else: print(-1)