[Python]BaekJoon.AC

[Python]백준 BaekJoon.AC 2798 : 블랙잭(브루트포스 알고리즘)

스뇨잉 2022. 1. 6. 02:28
728x90
728x90

 

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

 

2798번: 블랙잭

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

www.acmicpc.net

 

 

card 리스트에 카드 정보들을 넣어주고,

첫번째 카드를 뽑는 for문(i)

두번째 카드를 뽑는 for문(j)

세번째 카드를 뽑는 for문(l)을 만들어준다.

 

여기서 포인트는 각 for문의 범위다. 두번째 카드와 세번째 카드의 시작점을 직전에 뽑은 카드의 다음 카드로 설정해줬다.

끝점은.. 만약 첫번째 for문의 끝점이 N이고 N-2번 카드를 뽑았다면, 두번째 카드는 N-1번 카드를 뽑아야만 하고, 세번째엔 뽑을 수 있는 카드가 없다. (0부터 시작하기 때문에 N번 카드는 없다. N-1이 마지막 카드)

그러한 불상사를 막기 위해 N-2로 끝점을 제한했고, 두번째 카드의 for문도 같은 이유다.

 

 

 

N, M = map(int, input().split())
card = list(map(int, input().split()))
result = 0

for i in range(0, N-2):
    for j in range(i+1, N-1):
        for l in range(j+1, N):
            temp = card[i] + card[j] + card[l]
            if (result < temp) and (temp <= M):
                result = temp

print(result)

 

 

728x90
728x90