본문 바로가기
Algorithm

[백준] 2798번: 블랙잭(브루트포스) - Python

by Baest 2022. 3. 7.

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

 

2798번: 블랙잭

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

www.acmicpc.net

 

[문제유형]

- 브루트포스

 

 

[문제]

 

 

[제출한 코드 및 풀이]

- 지난번에 combination(조합)을 사용했던적이 있는데, 그 당시와 비슷한 방식으로 풀어야할 것 같아서 사용했다.

- n, m을 입력받고 그 다음줄에 입력 받은 숫자들을 numbers로 한 번에 담았다.

- 각 조합 중 합계가 가장 큰 숫자를 출력해야하니까 maxNum이라는 변수를 만들어줬다.

- numbers의 숫자를 세개씩 조합으로 만들고 그 다음에 for문을 돈다.

- for문은 조합의 길이만큼 돌고 각 조합의 합계가 maxNum보다 크고 m보다 크지 않을 경우 maxNum을 해당 조합의 합계로 변경해서 출력한다.

from itertools import combinations

n, m = map(int, input().split())
numbers = list(map(int, input().split()))
maxNum = 0
combi = list(combinations(numbers, 3))

for i in range(len(combi)):
    if maxNum < sum(combi[i]) <= m:
        maxNum = sum(combi[i])
print(maxNum)