728x90
주어진 정수의 자리수를 바꾸어서 가장 큰 30의 배수 만들기
더보기
문제
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.
미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.
입력
N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.
출력
미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.
10의 배수 : 2와 5의 배수 >>> 일의 자리 수가 0인 수
3의 배수 : 각 자리수의 합이 3의 배수
12 > 1+2 = 3
234 > 2+3+4 =9
123456789 > 1+2+3+4+5+6+7+8+9 = 45
import sys
input = sys.stdin.readline
num = input().strip()
num = sorted(num, reverse=True) # 내림차순 정렬 >>> 가장 큰 수
if num[-1] == '0': # 10의 배수인지 확인 : 일의 자리 수가 0
c = sum(map(int, num))
if c % 3 == 0: # 각 자리수의 합이 3의 배수이면 그 수는 3의 배수이다. >>> 30의 배수
print("".join(num))
exit()
print(-1)
더보기
3의 배수는 자리수를 바꿔도 3의 배수이기 때문에, 자리수의 합을 안 구하고 그냥 3의 배수인지 확인해봤습니다.
그런데 이게 시간이 조금 더 걸리네요.
잘 모르겠지만, 처음부터 문자로 받아서 연산하느라 int$($num$)$ 해야하는데, 이 시간이 좀 더 걸리나봅니다.
import sys
input = sys.stdin.readline
num = input().strip()
num = sorted(num, reverse=True)
if num[-1] == '0':
n = "".join(num)
if int(n) % 3 == 0:
print(n)
exit()
print(-1)
바로 30의 배수인지 확인하는 것도 두 번째랑 같은 시간이 걸리네요
import sys
input = sys.stdin.readline
num = input().strip()
num = sorted(num, reverse=True)
n = "".join(num)
if int(n) % 30 == 0:
print(n)
else: print(-1)
더보기
예제 입력 1
30
예제 출력 1
30
예제 입력 2
102
예제 출력 2
210
예제 입력 3
2931
예제 출력 3
-1
예제 입력 4
80875542
예제 출력 4
88755420
'IT > Python' 카테고리의 다른 글
[백준] 15904번 UCPC는 무엇의 약자일까? [Python] (0) | 2023.08.10 |
---|---|
[백준] 1543번 문서 검색 [Python] (0) | 2023.08.10 |
[백준] 10825번 국영수 [Python] - 정렬 (0) | 2023.08.09 |
[백준] 2578번 빙고 [Python] (0) | 2023.08.08 |