반응형
문제풀이
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)*v 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 |