## solution
첫 줄에숫자 N, M 이 주어진다. N은 카드의 수이며 M은 3장을 뽑았을때 넘으면 안되는 수.
그 밑에는 N개의 카드에 써져 있는 숫자가 주어질 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 입력하기
## CODE
```python
from itertools import combinations
N,M = map(int,input().split())
l = list(map(int,input().split()))
for idx in range(len(l)):
if l[idx] >= M:
l.remove(l[idx])
idx_case_list = []
for tmp in combinations(range(len(l)),3):
idx_case_list += [tmp]
sum_number = 0
for idx_list in idx_case_list:
pick_list = [l[idx_list[0]],l[idx_list[1]],l[idx_list[2]]]
if sum(pick_list) <= M:
if sum(pick_list) > sum_number:
sum_number = sum(pick_list)
print(sum_number)
```
제출한 코드
```python
from itertools import*
n,m,*l=map(int,open(0).read().split())
print(max(x for x in map(sum,combinations(l,3))if x<=m))
```
itertools 을 사용해서 풀어야 풀이가 짧아지는걸로 생각된다. 주어지는 수를 가져온 뒤에, 리스트에서 3장 뽑아서 sum한것들 중에, M을 넘지 않으면서 가장 큰 것을 출력하기.
짧게 완성한 사람들 코드가 다 이렇다. 나는 카드중에 M을 넘는 숫자를 지우는 코드를 넣었는데 필요없는 코드인듯 싶다.
조합 함수를 잘 안써봐서 인덱스를 리스트에 저장하고, 그걸로 뽑아오는 코드를 작성했는데, 그냥 리스트에서 직접 뽑으면 된다.
0 댓글