문제
출처: https://www.acmicpc.net/problem/10610
풀이
제 코드는 다음과 같습니다.
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 형태에서도 바로 찾을 수 있다는 것을 새롭게 알게 되었습니다.