본문 바로가기

SWLUG/파이썬 (코딩테스트)

[파이썬/백준] 2798번 블랙잭

2798번 블랙잭

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

 

 

 

문제 설명

 

 

 

예제

 

# 입력
5 215 6 7 8 9

# 출력
21
# 입력
10 50093 181 245 214 315 36 185 138 216 295

# 출력
497

 

 

문제 분석

 

N장의 카드 중 3장을 뽑아 합이 M을 넘지 않으며 가장 가까운 수가 되도록 해야한다. -> 모든 방식을 탐색하는 브루트포스

 

 

1)  n : 카드 개수 , m : 카드합의 최댓값을 입력받는다. int로 맵핑해준다.

     합들을 저장해줄 empty list = lst 를 생성한다.

 

 

2)  for문을 3번 중첩 사용하여 hap(합)을 구한 후 m보다 작거나 같다면,  lst(리스트)에 저장해준다.

     (문제의 조건중 하나가 m 넘으면 안 되므로)

     i는 0부터, j는 i+1부터, k는 j+1 부터 시작하므로 겹칠 가능성을 제외하였다.

 

3) n까지의 반복문이 종료되면 생성해둔 lst에서 max() 함수를 이용하여 최댓값을 출력해준다. 

 

n ,m = map(int, input().split())
arr = list(map(int, input().split()))
lst = []

for i in range(n):
    for j in range(i+1, n):
        for k in range(j+1, n):
            hap = arr[i] + arr[j] + arr[k]
            if  hap > m:
                continue
            else:
                lst.append(hap)

print(max(lst))