백준 | 2798

justhaza.log·2024년 4월 27일

알고리즘: BOJ

목록 보기
54/125

https://www.acmicpc.net/problem/2798


블랙잭은 카드의 합이 21을 넘지 않는 범위에서,
카드의 합을 최대한 크게 만드는 게임이다.

이 문제에선 주어진 정렬되지 않은 n장의 카드에 대해,
m을 넘지 않는, m에 가장 가까운 카드 3장의 합을 구하면 된다.

n은 3 이상 100 이하의 정수이고,
m은 10 이상 300,000 이하의 정수이다.


결국 모든 케이스를 확인해야 하는데,
3중 for문으로 모든 경우를 탐색해도 시간이나 공간 복잡도 문제가 없다.

즉, 브루트 포스로 접근하여 문제를 풀 수 있다.


코드(정답)는 다음과 같다.

import sys


n, m = map(int, sys.stdin.readline().split())
cards = list(map(int, sys.stdin.readline().split()))

max_sum = 0

for i in range(n):
    for j in range(i + 1, n):
        for k in range(j + 1, n):
            temp_sum = cards[i] + cards[j] + cards[k]

            if temp_sum <= m:
                if temp_sum > max_sum:
                    max_sum = temp_sum

print(max_sum)
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글