N 과 M 을 입력받는다
펼쳐진 카드들을 리스트로 받는다
주의
파이썬 3.xx 버전부터 리스트를 int형으로 만들기 위해서는 map으로 감싼 후 다시 list로 감싸줘야 list 전체 원소들이 int형이 된다
3개의 원소들을 탐색하기 위해서 for 문을 3중으로 감싼다.
import sys
N, M = map(int, sys.stdin.readline().split())
num_list = list(map(int, list(sys.stdin.readline().split())))
res = 0
sum_res = 0
for i in range(N-2):
for j in range(i+1, N-1):
for k in range(j+1, N):
sum_res = num_list[i] + num_list[j] + num_list[k]
if sum_res > M:
sum_res = 0
continue
elif sum_res == M:
print(M)
exit()
else:
res = max(res, sum_res)
print(res)
파이썬에서 제공해주는 combination 라이브러리가 있다.
조합이란 뜻인데 서로 다른 n개 중에서 r개를 취하여 nCr 을 구해주는 것이다.
이 문제도 해석해보면 M C 3 을 구하는 것이기 때문에 combination 라이브러리를 사용하면 쉽게 풀 수 있다.
import sys
import itertools
N, M = map(int, sys.stdin.readline().split())
num_list = list(map(int, list(sys.stdin.readline().split())))
sum_list = list(itertools.combinations(num_list, 3))
res = 0
sum_test = 0
for i in range(len(sum_list)):
sum_test = sum(sum_list[i])
if sum_test > M:
sum_test = 0
continue
elif sum_test == M:
res = sum_test
break
else:
res = max(res, sum_test)
print(res)