hi jaeneee
BOJ_10610_30_python_[그리디] 본문
https://www.acmicpc.net/problem/10610
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
1) 문제
2) 예시
3) 제출
import sys
input = sys.stdin.readline
n = list(map(int, input().rstrip()))
answer = ""
if 0 not in n:
answer = "-1"
elif sum(n) % 3 != 0:
answer = "-1"
else:
n.sort(reverse=True)
for i in n:
answer += str(i)
print(answer)
4) 메모리/시간/코드 길이
5) PLUS
너~무 단순하게 생각할 수 있는 문제이다
먼저 30의 배수가 될 수 있는 조건을 생각해 본다면,
10의 배수가 되는 방법과 3의 배수가 되는 방법을 곱하면 된다!
10의 배수가 될 수 있는 조건은 일의 자리 숫자에 0이 있으면 되고,
3의 배수가 될 수 있는 조건은 전체 숫자를 더했을 때 3의 배수가 되면 된다.
예를 들어, 213은 3의 배수이다. 3으로 나누지 않고 확인할 수 있는 방법은
2 + 1 + 3 = 6으로 6이 3의 배수이기 때문에 213이 3의 배수인 것을 알 수 있다.
그렇기 때문에 우선 30의 배수가 될 수 있는지의 여부를 판별하기 위해
n에 0이 포함되어 있는지(10의 배수인지),
n으로 받은 숫자들을 더했을 때 3의 배수인지(3의 배수인지)를 확인한 후,
이 조건에서 부합하지 않으면 -1을 answer에 대입해 줬다.
위 조건에 부합하면 가장 큰 수를 찾아야 하기 때문에 전체 숫자들은 내림차순으로 정렬하면
가장 큰 수가 될 수 있다.
'알고리즘 > baekjoon' 카테고리의 다른 글
BOJ_10162_전자레인지_python_[그리디] (0) | 2023.04.15 |
---|---|
BOJ_1715_카드 정렬하기_python_[그리디] (0) | 2023.04.13 |
BOJ_1541_잃어버린 괄호_python_[그리디] (0) | 2023.04.05 |
baekjooon(11659_구간 합 구하기 4)_python_[누적합] (0) | 2022.10.21 |
baekjoon(1929-소수 구하기)_python (0) | 2022.09.28 |
Comments