반응형
문제접근
- 조합의 합을 가지고 원하는 target값에 가장 가까우면서 target값 보다 작은 값을 구해주면 된다.
- itertools 라이브러리를 사용하면 보다 쉽게 풀 수 있다.
2021.03.15 - [Algorithm & Data structure] - [알고리즘] 순열 (Permutation)과 조합(Combination) (파이썬)
코드
import sys
from itertools import combinations
n, m = map(int, sys.stdin.readline().rstrip().split())
card = list(map(int,sys.stdin.readline().rstrip().split()))
comb_list = list(combinations(card,3)) # 카드에서 3개를 뽑는다.
def getMaxSum(m):
target = m
diff = 1000000000 # 원하는 수와 차이값을 담을 객체
for comb in comb_list:
total = sum(comb)
if total == target:
return total
else:
if total > target:
continue
if target - total < diff: # if abs(target - total) < abs(diff): m을 넘어가는 경우는 고려하지 않아도되서 abs는 뺐다
diff = target - total # 21 - 22 = -1 21 - 20 = +1
return target - diff
print(getMaxSum(m))
'코딩테스트 > 파이썬' 카테고리의 다른 글
[백준] 잃어버린 괄호 1541 (파이썬) (0) | 2021.03.16 |
---|---|
[백준] [브루트포스] 분해합 2231 (파이썬) (0) | 2021.03.15 |
[백준] [수학] 터렛 1002 (파이썬) (0) | 2021.03.15 |
[백준] [DP] 계단오르기 2579 (파이썬) (0) | 2021.03.15 |
[백준] [조합] N과 M(2) 15650 (파이썬) (0) | 2021.03.15 |