![[BOJ] 백준_10610번_30_Python3](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyGo5w%2FbtsB4Sd9ymq%2Ft0G0TJDZ6YKv9lpqihB4NK%2Fimg.png)
[BOJ] 백준_10610번_30_Python3백준 알고리즘2023. 12. 17. 10:00
목차
🌟 30
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
조건
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
1 초 | 256 MB | 46923 | 18835 | 14954 | 39.667% |
문제
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.
미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.
입력
N을 입력받는다. N는 최대 100000개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.
출력
미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.
예제 입력 1
30
예제 출력 1
30
예제 입력 2
102
예제 출력 2
210
예제 입력 3
2931
예제 출력 3
-1
풀이 계획
itertools.permutations을 사용해서 모든 조합을 탐색하며 30의 배수인지 검사해보는 식으로 풀려고 계획하고 아래와 같이 코드를 짰다.
import sys
import itertools
read = sys.stdin.readline
def sol():
n = list(read().strip())
n.sort(reverse=True)
for i in itertools.permutations(n, len(n)):
temp = int(''.join(i))
if temp % 30 == 0:
print(temp)
return
print(-1)
return
sol()
근데 시간초과가 났다..원인 역시 itertools.permutations에 있었다. itertools.permutations의 시간복잡도는 O(N!)이었다. 내림차순 정렬을 했을 때 마지막 숫자가 0이 아니고, 입력받은 수의 모든 자리수의 합이 3이 아니면 30의 배수가 될 수 없는 점을 이용해서 조건식을 통해 다시 구성했다.
풀이
import sys
read = sys.stdin.readline
def sol():
n = list(read().strip())
n.sort(reverse=True)
if sum(map(int, n)) % 3 != 0:
print(-1)
return
if n[-1] != '0':
print(-1)
return
print(''.join(n))
return
sol()
728x90
반응형
'백준 알고리즘' 카테고리의 다른 글
[BOJ] 백준_2178번_미로 탐색_Python3 (35) | 2024.01.03 |
---|---|
[BOJ] 백준_5635번_생일_Python3 (2) | 2024.01.01 |
[BOJ] 백준_11656번_거꾸로 구구단_Python3 (2) | 2023.12.16 |
[BOJ] 백준_11656번_접미사 배열_Python3 (0) | 2023.12.15 |
[BOJ] 백준_9095번_1, 2, 3 만들기_Python3 (0) | 2023.12.14 |
@kdj :: Childev'note
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!