코딩테스트/백준
[Python] 백준 2798. 블랙잭
jungmin.park
2023. 11. 22. 10:08
https://www.acmicpc.net/problem/2798
문제 설명:
주어진 카드 N개와 M을 넘지 않으면서 M을 넘지 않고 M에 최대한 각까운 카드 3장의 합을 구하는 문제
풀이 설계:
- 찾을 카드의 갯수가 정해져있기 때문에 재귀 함수보다 브루투포스 알고리즘을 이용하여 찾아보겠다.
- 브루투포스 알고리즘은 쉽게 말해 처음부터 끝까지 찾을때까지 모든 숫자들을 찾아보는 것이다.
- 결국 3장의 카드를 찾기 위해 for문이 3개가 필요하다.
- 만약 카드 3장을 뽑았을때 M보다 크다면 계속 진행한다.
- 카드 3장의 합이 작거나 같다면 마지막에 저장한 합과 카드3장의 합계를 비교하여 최댓값을 저장한다.
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
cards = list(map(int, input().split()))
sum = 0
for i in range(n):
for j in range(i+1, n):
for r in range(j+1, n):
# 만약 카드 3장을 뽑았을때 M보다 크다면 계속 진행한다.
if cards[i] + cards[j] + cards[r] > m:
continue
# 카드 3장의 합이 작거나 같다면 마지막에 저장한 합과 카드3장의 합계를 비교하여 최댓값을 저장한다.
else:
sum = max(sum, cards[i] + cards[j] + cards[r])
print(sum)