Python_알고리즘
[Python] 백준 2798 블랙잭
hahihuree
2021. 8. 6. 23:04
문제 바로가기
문제분석
# n개의 카드 중에서 3장을 골라 그 값의 합이 딜러가 외친 m과 같거나 가장 근접한 값을 찾아야 한다.
# 3장을 골라 조합해야하므로 삼중 반복문으로 풀이한다.
문제풀이
n, m = map(int, input().split())
cards = list(map(int, input().split()))
sum = [] # 각 조합으로 더한 값들을 저장
for i in range(n):
for j in range(i+1, n):
for k in range(j+1, n):
card_sum = cards[i] + cards[j] + cards[k]
if card_sum <= m:
sum.append(card_sum)
print(max(sum))
# 카드의 갯수인 n과 딜러가 외친 카드의 합인 m을 입력값으로 받는다.
# n장의 카드 중에서 3장을 골라야 하므로 3중 반복문으로 완전탐색을 한다.
# n개의 카드를 반복문에서 하나씩 꺼내 쓸 수 있도록 리스트에 담는다.
# 각 조합으로 더한 값들을 저장하는 빈 리스트를 하나 초기화한다.
# n개 카드를 반복문을 돌리는데, i부터 시작하고
- i이후부터 n까지 다시 한 장(j)을 뽑고
- 다시 j이후부터 n까지 한 장(k)을 뽑는다.
- 이때, 카드의 각각 i, j, k번째 인덱스의 합을 구하고
- 만약 그 합이 딜러가 외친 m보다 작거나 같다면 각 조합으로 더한 값을 저잘하기 위해 초기화 했던 sum리스트에 append해준다.
- n개의 반복문이 모두 끝나면
# 조합들이 모인 sum리스트에서 가장 큰 값을 max를 이용해 출력한다.