n, m = map(int, input().split())
lst = list(map(int, input().split()))
dif = 300000
for i in range(n - 2):
for j in range(i + 1, n - 1):
for k in range(j + 1, n):
sum = lst[i] + lst[j] + lst[k]
if m - sum < dif and sum <= m:
dif = m - sum
result = sum
print(result)
그냥 단순하게 삼중 반복문 써서 풀었는데 다른 사람들 풀이를 보니 순열 조합 라이브러리 itertools 모듈의 combinations 함수를 많이 사용하는 것 같다.
combinations 함수를 적용해봤다.
from itertools import combinations
n, m = map(int, input().split())
lst = list(map(int, input().split()))
max_sum = 0
for it in combinations(lst, 3):
if max_sum < sum(it) <= m:
max_sum = sum(it)
print(max_sum)
그리고 반복문을 써서 여러 줄 입력받을 경우에는 input() 대신에 sys 모듈의 sys.stdin.readline()을 사용하자.
'알고리즘' 카테고리의 다른 글
[백준] 1436 영화감독 숌 - 파이썬 (0) | 2022.04.04 |
---|---|
[백준] 1018 체스판 다시 칠하기 - 파이썬 (0) | 2022.04.04 |
[백준] 7568 덩치 - 파이썬 (0) | 2022.04.02 |
[백준] 2231 분해합 - 파이썬 (0) | 2022.04.01 |
[프로그래머스] 하샤드 수, 콜라츠 추측 (0) | 2022.03.22 |