archive

[백준] 블랙잭 (Python) 본문

STUDY/알고리즘

[백준] 블랙잭 (Python)

seonyounggg 2021. 3. 8. 20:57

✏️ 문제

 

2798번: 블랙잭

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

www.acmicpc.net

✏️ 풀이

주어진 카드 중 3개를 고른 합이 M을 넘지 않으며 최대한 M과 가까워야 한다.

중복해서 고를 수 없고 순서 관계없이 선택하므로 조합을 사용한다.

✏️ 코드

import itertools

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

min = m
min_sum = 0

for i in itertools.combinations(nums, 3):
    diff = m - sum(i)
    if diff == 0:
        min = 0
        min_sum = sum(i)
        break
    elif diff > 0:
        if min > diff:
            min = diff
            min_sum = sum(i)

print(min_sum)

시간복잡도를 줄이기 위해 diff가 0이면 차이가 최소이므로 바로 출력하고 break하였다.

'STUDY > 알고리즘' 카테고리의 다른 글

[백준] 체스판 다시 칠하기 (Python)  (0) 2021.03.08
[백준] 분해합 (Python)  (0) 2021.03.08
[백준] 수 정렬하기 3 (Python)  (0) 2021.03.08
[백준] 터렛 (Python)  (0) 2021.03.08
[백준] 골드바흐의 추측 (Python)  (0) 2021.03.08
Comments