hi jaeneee

BOJ_10610_30_python_[그리디] 본문

알고리즘/baekjoon

BOJ_10610_30_python_[그리디]

ash silver 2023. 4. 6. 15:23

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에 대입해 줬다.

 

위 조건에 부합하면 가장 큰 수를 찾아야 하기 때문에 전체 숫자들은 내림차순으로 정렬하면 

가장 큰 수가 될 수 있다.

 

 

Comments