Home 백준 10610 30 (python)
Post
Cancel

백준 10610 30 (python)

문제

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

image

풀이

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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()

모범 답안

1
2
3
4
5
6
7
8
9
10
11
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 - 리스트를 문자열로 변환

This post is licensed under CC BY 4.0 by the author.

백준 11652 카드 (python)

백준 1931 회의실 배정 (python)