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

 

** 문제 유형

  • 배열, 완전탐색

 

** 풀이

  1. 카드 중 3개씩 뽑는 모든 경우의 수는 C(n, 3)이며, n은 최대 100
  2. 단순히 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)