본문 바로가기

Python 코딩테스트

[백준] 2798 블랙잭 파이썬

반응형

문제

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

 

2798번: 블랙잭

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

www.acmicpc.net


풀이

단순하게 3중 반복문을 사용해 완전 탐색으로 풀었다.

n,m = map(int,input().split())

card = list(map(int,input().split()))
ans = 0
for i in range(0,n-2):
    for j in range(i+1,n-1):
        for k in range(j+1,n):
            sum = card[i] + card[j] + card[k]
            if sum > m:
                continue
            else:
                ans = max(ans, sum)
                
print(ans)

한 번 반복할 때 마다 카드 3장의 합이 넘으면 안 되는 수 m 보다 작은지 확인하고 

작다면 작은 합들 중 가장 큰 합을 ans에 저장한다.

 

 

 

하지만 문제의 알고리즘 분류가 브루트포스 이기 때문에

combinations()를 사용해서도 풀어보자.

from itertools import combinations

n,m = map(int, input().split())
card = list(map(int, input().split()))

ans = 0

for i in combinations(card, 3):
    if ans < sum(i) <= m:
        ans = sum(i)

print(ans)

 

combinations()는 리스트 내의 모든 조합을 나타낼 수 있다.

combinations(리스트, 인자 값)

 

combinations() 함수를 사용해 더 간단하게 풀 수 있다.

 

 

 

반응형