주어진 카드 더미 n개 중 3개를 고르는
전체 경우 중
가장 m에 가까운 경우의 합을 출력
알고리즘: Brute Force
import sys
n, m = map(int, sys.stdin.readline().split())
ret = 0
card = list(map(int, sys.stdin.readline().split()))
for i in range(n - 2):
for j in range(i + 1, n - 1):
for k in range(j + 1, n):
if (card[i] + card[j] + card[k] <= m):
ret = max(ret, card[i] + card[j] + card[k])
print (ret)
모든 경우를 돌며 m을 넘지 않는 최댓값을 뽑기 위해 브루트포스 알고리즘을 사용
n개의 카드 더미 중 3개를 골라야 하므로, 첫번째 카드는 n - 2까지의 선택이 가능하고, 두번째 카드는 첫번째 카드를 제외한 후 n - 1까지의 선택이 가능하며, 세번째 카드는 기선택된 첫번째 + 두번째 카드를 제외한 후 n까지의 선택이 가능하다.
따라서 위와 같이 반복문을 돌리며, 선택된 카드 3개의 합이 m을 넘지 않을 경우 기존의 max값과 비교하며 최댓값을 저장 후 출력한다
이번 문제는 정말 딱히 어려울 게 없는 기본적인 문제였다
반복문에서의 인덱스 설정, m을 넘지 않도록 하는 조건문 이 두 가지만 잘 신경쓴다면
무난하게 풀 수 있는 문제였다