문제
코드
My answer
n,res=list(map(int,[i for i in input()])),-1
tmp=""
if(sum(n)%3!=0 or (0 not in n)):
print(-1)
else:
n=sorted(n,reverse=True)
for i in n:
tmp+=str(i)
print(int(tmp))
Another answer
n=int("".join(sorted(input())[::-1]))
print(n if n%30==0else-1)
풀이
우선 이 문제도 맨처음에 시간초과로 고생했었는데, 처음에는 그냥 문자열을 받고 그 수들을 순열을 이용해서 모든 경우의 수를 만들고 그중 30으로 나누어떨어지는 것중에 최댓값을 구했다. 그런데 이렇게 하면 들어오는 숫자의 길이가 길수록 시간이 매우 오래걸린다. 그러다가 문득 어릴 때 배운 3의 배수의 특징이 생각났다. 바로 3의배수인 수는 각자릿수의 숫자들을 모두 더하면 3의 배수라는 것이다. 예를 들어 123은 각자리의 합이 6이므로 3의배수이다. 따라서 123도 3의 배수다. 이방법을 통해서 문제를 해결했더니 조합도 안만들어도되고 한번에 풀렸다.
아래 코드는 나와 같은 방법을 더 깔끔하게 표현한 것 같다.
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python] 백준 #1783 - 병든 나이트 (0) | 2021.12.11 |
---|---|
[Python] 백준 #6588- 골드바흐의 추측 [try_again] (0) | 2021.12.09 |
[Python] 백준 #1476- 날짜 계산 (0) | 2021.12.09 |
[Python] 백준 #2004- 조합 0의 개수 (0) | 2021.12.07 |
[Python] 백준 #1676- 팩토리얼 0의 개수 (0) | 2021.12.07 |