Problem Solving/Online Judge
[BOJ] #2798 - 블랙잭
se0m
2021. 6. 12. 00:31
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
** 문제 유형
- 배열, 완전탐색
** 풀이
- 카드 중 3개씩 뽑는 모든 경우의 수는 C(n, 3)이며, n은 최대 100
- 단순히 3중 반복문으로 모든 경우의 수를 확인하여 문제 해결 가능 -> 파이썬은 1초에 2천만개의 연산 수행 가능
# 방법 1
n, m = list(map(int, input().split(' ')))
data = list(map(int, input().split(' ')))
result = 0
length = len(data)
count = 0
for i in range(0, length):
for j in range(i + 1, length):
for k in range(j + 1, length):
sum_value = data[i] + data[j] + data[k]
if sum_value <= m:
result = max(result, sum_value)
print(result)
# 방법 2
from itertools import combinations
n, m = list(map(int, input().split(' ')))
data = list(map(int, input().split(' ')))
comb = combinations(data, 3)
max_val = -1
for sub in comb:
if sum(sub) <= m:
max_val = max(max_val, sum(sub))
print(max_val)