반응형

문제풀이

30의 배수가 될 조건은 아래와 같다.

1. 0이 한개 이상 들어가야한다.

2. 모든 수의 합이 3의 배수여야한다.(1230 이면, 1230의 합은 1+2+3+0 = 6)

 

1. collections.Counter 를 이용하여 받은 숫자들을 한자리씩 잘라 센다.(위의 조건2를 위한 과정)

2. 1에서 센 딕셔너리의 key*value 의 합이 3의 배수인지 확인한다.(조건2)

3. 조건1, 2를 만족한다면 숫자들을 큰 수부터 붙여나간다.

 

Python Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys,collections
 
def sol(n):
    dic = collections.Counter(n)
    check = sum(int(k)*for k,v in dic.items())
    if "0" not in dic or check%3!=0:
        return -1
    else :
        ans = ""
        for i in range(9,-1,-1):
            str_i = str(i)
            if str_i in dic :
                for _ in range(dic[str_i]):
                    ans += str_i
        return ans
 
if __name__ == "__main__":
    n=sys.stdin.readline().split()[0]
    print(sol(n))
cs

Line 4 : 주어진 숫자를 하나씩 잘라 개수를 센다.

Line 5 : 숫자들의 합을 계산한다.

Line 6 : 조건 1 만족 여부를 확인한다.

Line 8 : 조건1, 2를 모두 만족한 경우로 큰 숫자부터(9부터) 붙여나간다.

문제 링크

 

10610번: 30

문제 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다. 미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라. 입력 N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다. 출력 미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는

www.acmicpc.net

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

백준 1002 터렛  (0) 2020.04.09
백준 11048 이동하기  (0) 2020.03.30
백준 2436 공약수  (0) 2020.03.24
백준 2559 수열  (0) 2020.03.23
백준 1058 친구  (0) 2020.03.19

+ Recent posts