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
'Algorithm (PS)' 카테고리의 다른 글
[백준] 1967 트리의 지름 : 다익스트라를 응용하자 ! (0) | 2022.02.16 |
---|---|
[백준/삼성기출] 17144 미세먼지 안녕! - 구현구현구현문제 (0) | 2022.02.15 |
[백준] 11660 구간 합구하기 -> 다이나믹 프로그래밍으로 효율적인 연산! (0) | 2022.02.13 |
[백준] 9466 텀프로젝트 : 다익스트라로 왕복하기 (0) | 2022.02.10 |
[백준] 11657 타임머신 : Bellman-Ford 알고리즘 그자체인 문제 ! (0) | 2022.02.08 |