알고리즘 문제 풀기/백준(Baekjoon)

[백준 알고리즘] 2798번 블랙잭 - 브루트포스 알고리즘, 파이썬

hibscus 2021. 2. 20. 00:43

- 2798번 블랙잭 

 

 

 

 

🎮 문제 접근 방법

 

1) 인덱스를 통해 3가지 카드를 뽑을 수 있는 경우의 수를 구한다 ex) 0, 1, 2 / 0, 1, 3 / 0, 1, 4 ......

 

 

- 단, 합은 blackjack 숫자를 넘지 못함!

(=> blackjack에 해당하는 숫자가 나올때는 더이상 큰값이 없으므로 바로 출력 가능)

 

 

 

 

🎈 시간을 줄이기 위해서는

 

1) blackjack에 해당하는 숫자가 나올때는 바로 리턴하도록

 

2) 카드가 3개이므로 N-2까지만 돌면 된다. 

 

 

 

 

 


N, M = map(int, input().split())
arr = list(map(int, input().split()))

def blackjack(N, M):
    max_val = 0
    for i in range(N-2):
        for j in range(i+1, N-1):
            S = 0
            for k in range(j+1, N):
                S = arr[i] + arr[j] + arr[k]
                if S == M:
                    return S
                else:
                    if max_val < S and S <= M:
                        max_val = S
    return max_val

print(blackjack(N, M))

 

 

 

 

 

www.acmicpc.net/problem/2798

 

 

2798번: 블랙잭

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장

www.acmicpc.net