[백준_2798] 블랙잭

wkkyu08·2021년 7월 29일
0

백준

목록 보기
11/17

🔴 문제


🟢 풀이

가능한 모든 카드 조합을 더하여 계산한다.
3중 for문을 사용하여 차례로 3개의 카드의 합을 구하여 최대값을 구한다. 합이 M을 넘지 않아야 한다는 조건이 있는 것을 제외하면 일반적인 최댓값 구하기 방법과 동일하다.

## 3중 for문을 사용한 풀이
import sys
N, M = map(int, sys.stdin.readline().split())
cards = list(map(int, sys.stdin.readline().split()))

max_sum = 0
temp = 0
for i in range(N):
    for j in range(i+1, N):
        for k in range(j+1, N):
            temp = cards[i]+cards[j]+cards[k]
            if max_sum < temp <= M:
                max_sum = temp
print(max_sum)

for문은 한 번만 사용하고 카드의 조합은 combinations를 이용하여 구하는 방법도 있다. 입력 받은 cards 리스트에서 3개의 요소씩을 뽑은 combinations를 리스트로 만들고 각 조합의 합을 구하기만 하면 위의 풀이와 거의 동일한 방법으로 계산할 수 있다.

## combinations를 사용한 풀이
import sys
from itertools import combinations
N, M = map(int, sys.stdin.readline().split())
cards = list(map(int, sys.stdin.readline().split()))

max_sum = 0
for c in list(combinations(cards, 3)):
    temp = sum(c)
    if max_sum < temp <= M:
        max_sum = temp
print(max_sum)

🟡 노트

📌 리스트에서 순열, 조합 만들기 📌

from itertools import combinations, permutations

nums = [1, 2, 3]

print(list(combinations(nums, 2)))
# 출력: [(1, 2), (1, 3), (2, 3)]
print(list(permutations(nums, 2)))
# 출력: [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

# -------------------------------------------------------
# 참고로 list형으로 변환하지 않고 그냥 출력하면
print(combinations(nums, 2))
# <itertools.combinations object at 0x00000260C5664D60>
# 위와 같이 출력된다.

0개의 댓글

관련 채용 정보