본문 바로가기
코딩테스트/파이썬

[백준] [조합] 블랙잭 2798 (파이썬)

by 커피는아아 2021. 3. 15.
반응형

문제접근

  • 조합의 합을 가지고 원하는 target값에 가장 가까우면서 target값 보다 작은 값을 구해주면 된다.
  • itertools 라이브러리를 사용하면 보다 쉽게 풀 수 있다.

2021.03.15 - [Algorithm & Data structure] - [알고리즘] 순열 (Permutation)과 조합(Combination) (파이썬)

 

[알고리즘] 순열 (Permutation)과 조합(Combination) (파이썬)

순열과 조합 경우의수 한 번의 시행에서 일어날 수 있는 사건의 가지 수 재귀 함수, 반복문을 이용해서 직접 구현 가능하지만 실제 코딩테스트에서 직접 구현하기는 매우 번거롭다 순열 (Permutati

seongbindb.tistory.com

코드

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))