찔끔찔끔씩😎

[백준] 2798번 블랙잭 - python 본문

Algorithm/백준

[백준] 2798번 블랙잭 - python

댕경 2021. 11. 11. 15:48
728x90

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

 


문제

n장 중 3장을 골라 3장의 합이 m에 최대한 가까운 최대의 수를 출력하라


해결1 , 코드1

n개의 수를 오름차순으로 정렬한 뒤

for문을 3번 충첩하여 3장 합의 경우의 수를 모두 구해본다.

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

arr.sort
sum = 0
for i in range(0,n):
    for j in range(i+1,n):
        for k in range(j+1,n):
            if arr[i] + arr[j] + arr[k] > m:
                continue
            else:
                sum = max(sum, arr[i] + arr[j] + arr[k])


print(sum)

해결2 , 코드2

combinations 사용하기

3장의 조합을 combinations를 사용해 list화 해둔 뒤, for 문 하나로 구현 한다.

# combinations 이용
from itertools import combinations

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

cases = list(combinations(arr,3))
max_sum = 0

for case in cases:
    temp = sum(case)
    if max_sum < temp <= m:
        max_sum = temp

print(max_sum)
Comments