ProblemSolving/Greedy

백준 10610 30 (python)

OSNIM 2022. 3. 28. 16:45
반응형

문제

출처: https://www.acmicpc.net/problem/10610

풀이

제 코드는 다음과 같습니다.

import sys
num = sys.stdin.readline().rstrip()

def sol():
    if '0' not in num: #입력에 0 이 없으면 30 배수 안되므로 -1
        print(-1)
        return
    num_list = list(num) #
    num_list.sort(reverse=True) #

    SUM = 0
    for i in range(len(num_list)):
        # 각 자리수의 합이 3의 배수이면 num은 3의 배수
        SUM += int(num[i])
    if SUM % 3 == 0:
        print("".join(num_list))
        return
    else:
        print(-1)
        return
sol()
 

모범 답안

import sys

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

if sum(num)%3 == 0 and 0 in num:
   num.sort(reverse=True)
   print(''.join(map(str, num)))

else:
    print(-1)
 

저는 입력받은 숫자를 list로 변환한 후, 각 원소를 더해서 3의 배수인지 판별했습니다. 하지만 모범 답안은 sum 함수를 이용하고 join 함수에서 map 함수를 이용하여 바로 숫자로 된 list를 str로 바꿔주어 간결하고 직관적인 코드가 된 것을 확인할 수 있었습니다.

 

sum 함수는 모든 경우에서 되는 것이 아니라, 리스트 형태에서 원소들 모두 숫자로 되어있어야 사용할 수 있었습니다.

 

in 함수를 통해 찾고자하는 원소가 있는지 파악하기 위해서는 string 에서 ‘‘를 통해 바로 찾을 수 있는 것 뿐만 아니라 list 형태에서도 바로 찾을 수 있다는 것을 새롭게 알게 되었습니다.

참고

Python - 리스트를 문자열로 변환

반응형