상상쓰

[추석맞이 코딩챌린지③] 블랙잭 본문

Coding Test

[추석맞이 코딩챌린지③] 블랙잭

상상쓰 2021. 9. 21. 19:55

https://cafe.naver.com/codeuniv/44963

 

[추석맞이 코딩챌린지③] 블랙잭

첫 번째 문제와 두 번째 문제는 잘 풀어보셨나요? 오늘은 Lv.3 문제로 좀 어려울 수 있어요ㅠㅠ 하지만 우리 모두 할 수 있어요! 오늘도 파이팅💪💻🔥 세 번째 문제는 ...

cafe.naver.com

 

재귀함수를 사용하여 N 개의 카드 중에서 세 장의 카드를 뽑도록 구현하였다.

 

0

0 1

0 1 2

0 1 3

.

.

.

0 1 N

0 2 3

.

.

.

N-3

N-3 N-2

N-3 N-2 N-1

 

순으로 계산하며 하나의 카드 또는 두 장의 카드의 숫자의 합이 X 를 넘으면 그 카드를 포함하는 경우는 더 진행하지 않는다. 합이 X 를 넘지 않으면서 세 장이 됐을 때 세 장의 카드의 숫자의 합 중에서 최댓값을 출력한다.

 

import sys

N, X = map(int, sys.stdin.readline().split())
cards = list(map(int, sys.stdin.readline().split()))
cards.sort()
answer = 0

def rf(N, X, current, result, count):
    global cards
    global answer
    
    if count == 3:
        answer = max(answer, result)
    else:
        for i in range(current+1, N+count-2):
            if result + cards[i] <= X:
                rf(N, X, i, result + cards[i], count + 1)

rf(N, X, -1, 0, 0)
                
print(answer)

 

Comments