백준 2798번 풀이

문제

블랙잭… 진짜로 그냥 블랙잭이다. 카드 장 수와 마지노선, 그리고 카드가 주어질 때 카드 세 장의 합이 마지노선을 넘지 않으면서 제일 큰 수를 구하는 문제다.

Reference

https://go-coding.tistory.com/67 ([Brute Force] 브루트 포스 설명과 간단 코테 풀이)

https://duwjdtn11.tistory.com/297 ([Algorithm] [Python] BOJ/백준 – 2798_블랙잭)

풀이

일단 마지노선 얘기가 왜 나왔냐면… 블랙잭의 룰이 그렇다. 블랙잭은 카드의 합이 21이 넘으면 지는 게임이기 때문. 즉, 카드 세 장의 숫자를 합쳤을 때 마지노선으로 주어진 수보다 크면 진다. 예시 입력에서 5 21이 주어졌을 때 답은 21이지만 실제로 다 계산해보면 24까지 나온다. 근데 24는 21보다 크니까 져요… 

import sys
card,maginot = map(int,sys.stdin.readline().split())
card_list = list(map(int,sys.stdin.readline().split()))
result = 0

for i in range(card):
    for j in range(i+1,card):
        for k in range(j+1,card):
            if card_list[i]+card_list[j]+card_list[k] > maginot:
                continue
            else: 
                result = max(result,card_list[i]+card_list[j]+card_list[k])
#이거 3중for로 되는거 실화? 

print(result)

이걸로 한방컷 실화…