[문제]

https://www.acmicpc.net/problem/2798

 

2798번: 블랙잭

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장

www.acmicpc.net

 


[풀이]

간단한 문제인데 삼중 for문의 범위 지정이 가장 신경 써야 할 부분 같다.

특정 카드를 한 장 뽑았다면 다시 그 카드를 뽑을 수 없기 때문에 세 반복문의 index가 겹치지 않아야 한다.

 

세 카드를 더했을 때 m을 넘지 않는 값 중 가장 큰 값을 구해준다.

 


[코드]

import sys


if __name__ == '__main__':
    n, m = map(int, sys.stdin.readline().split())
    card = sorted(list(map(int, sys.stdin.readline().split())))

    res = 0
    for i in range(0, 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:
                    continue
                else:
                    res = max(res, card[i] + card[j] + card[k])
    print(res)