0%

BOJ 2798

Input

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다.

둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다.

합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.

1
2
3
4
5
import sys
input = sys.stdin.readline

n, m = map(int, input().split())
s = list(map(int, input().split()))

Brute Force

  • 3개의 합이 m과 가장 가까울 경우
  • m을 넘지 않을 경우
1
2
3
4
5
6
7
8
ret = 0

for i in range(n-2):
for j in range(i+1, n-1):
for k in range(j+1, n):
sum = s[i]+s[j]+s[k]
if (m-sum) >= 0 and abs(m-sum) < abs(m-ret):
ret = sum

Output

첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다.

1
print(ret)