성장일기

[python] 백준 10610 - 30 본문

알고리즘 문제

[python] 백준 10610 - 30

김몽몽 2022. 1. 7. 16:28

입력받은 숫자들을 섞어

30의 배수가 되는 가장 큰 수 출력하기

존재하지 않으면 -1 출력

 

🧨1. 30의 배수 조건: 0이 존재하고, 각 자리의 합이 3의 배수

2. 자릿수만큼 10 곱해주기(시간초과)

-> 그냥 join해주자(¬_¬ )(허탈)

 

<시간초과 코드>

import sys
input=sys.stdin.readline

num=list(map(int,input().rstrip()))
num=sorted(num,reverse=True) #내림차순 sorting
# 30의 배수 : 모든 자리 수의 합이 3의 배수, 0이 하나 이상
#print(num)
if 0 in num:  #0이 리스트에 있고
    if sum(num)%3==0: #3으로 나눠지면
        temp=0
        for i in range(len(num)-1):
            temp+= num[i] * (10**(len(num)-(i+1)))  #ㅎㅎ,, 
        print(temp)
    else:
        print(-1)
else:
    print(-1)

 

<정답>

import sys
input=sys.stdin.readline
num=list(map(int,input().rstrip()))
#num=sorted(num,reverse=True)
# 30의 배수 : 모든 자리 수의 합이 3의 배수, 0이 하나 이상
#print(num)
if 0 in num:
    if sum(num)%3==0:
        num=sorted(num,reverse=True)  #되는것만 sort해주는 걸로 바꿈
        print(''.join(map(str,num)))  #붙이기 
    else:
        print(-1)
else:
    print(-1)

 

<남자친구코드> - 메모리 덜든다😂

import sys
input=sys.stdin.readline
num=list(map(int,input().rstrip()))

cnt_arr=[0 for i in range(10)]
zero_check=False
sum_arr=0
result=''

for n in num:
    sum_arr+=n
    if n==0:
        zero_check=True
    cnt_arr[n]+=1

if zero_check and sum_arr %3==0:
    for i in range(9,-1,-1):
        result=result+(str(i)*cnt_arr[i])
    print(result)
else:
    print(-1)

'알고리즘 문제' 카테고리의 다른 글

[python] 백준 5430 - AC  (0) 2022.01.08
[python] 백준 1037 - 약수  (0) 2022.01.07
[python] 백준 1026 - 보물  (0) 2022.01.06
[python] 백준 2164 - 카드 2  (0) 2022.01.05
[python] 백준 7785 - 회사에 있는 사람  (0) 2022.01.01