본문 바로가기
알고리즘

[알고리즘/백준] 2798번 블랙잭 Python 파이썬

by 배애앰이 좋아 2023. 2. 21.
반응형

 

이번 문제는 생각을 조금 해야하는 문제이다.

 

 

카드 세장을 뽑아서 최대한 M에 가까운 숫자를 만드는 것이 관건이다. 처음에 생각한 방법은 일일이 다 검사해서 확인해주는 방법이다. 삼중 반복문을 이용했고 큰 값을 넣어주었다. (모든 경우의 수를 다 확인해야하는 완전 탐색 문제이다.)

 

다음과 같은 코드를 통해 통과하였다.

 

import sys
input = sys.stdin.readline

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

answer = 0
for i in range(N):
    for j in range(i+1, N):
        for k in range(j+1, N):
            num = cards[i]+cards[j]+cards[k]
            if num <= M:
                if num > answer:
                    answer = num
print(answer)

 

다만, 비효율적이라 다른 방법이 없나 궁금했고 다른 사람들의 방법을 찾아보니 파이썬 라이브러리로 순열 조합을 사용해서 풀었다. 

 

import sys
from itertools import combinations
input = sys.stdin.readline

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

for i in combinations(cards, 3):
    print(i)

 

위 결과를 확인해보면,

 

 

알아서 모든 경우의 수의 조합을 뽑아주는 것을 확인할 수 있다.

유용한 함수인 것 같아 다음부터는 사용하면 좋을 거 같다.

 

반응형

댓글