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)