Algorithm (PS)

[백준] 10610 in Python : 시간초과를 위해 Greedy를 떠올리자

minjiwoo 2022. 2. 15. 00:44
728x90

1. 첫번째 시도.. 시간초과난다 

 

from itertools import permutations

n = list(input())
result = -1
cases = permutations(n, len(n))

for case in cases:
    if case[0] == '0':
        continue
    else:
        num = ''
        for i in case:
            num += i
        num = int(num)
        if num%30 == 0:
            result = max(result, num)
print(result)

 

if 문에서 30의 배수가 아닌 조건을 걸러주면 된다 !! 

우선 30의 배수를 떠올려 보면 30, 60, 90, 120, 150, 180, 210 ...

0 으로 끝나는 것을 알 수 있다!! 

또한 '3'의 배수의 성질인 각자리 숫자 합이 3의 배수여야 한다 

 

그렇게 else 를 통과한 것들은 모두 30의 배수라는 뜻인데, 숫자를 내림차순으로 정렬하면 가장 큰 숫자를 바로 구할 수 있다 

조건을 만족하는 후보들 중에서 가장 큰것! -> 바로 여기서 Greedy 접근을 해야하는 것이다 

n = list(input())
total = 0

for i in n:
    total += int(i)
if '0' not in n or total %3 != 0:
    print(-1)
else:
    n.sort(reverse=True)
    print(''.join(n))

+ 문자열 합칠 때는 join()함수가 역시 유용하다 

728x90