감자튀김 공장🍟

[백준/2798] 블랙잭 (with 파이썬) 본문

Algorithm/BOJ

[백준/2798] 블랙잭 (with 파이썬)

Potato potage 2022. 11. 25. 14:37
반응형

✔ 문제


풀이

import sys
from itertools import combinations
input = sys.stdin.readline

n, m = map(int, input().split())
numbers = list(map(int, input().split()))
combi = list(combinations(numbers, 3))
sum_combi = []

for i in combi:
    sum_combi.append(i[0] + i[1] + i[2])

max_n = 0

for i in sum_combi:
    if max_n < i <= m:
        max_n = i
print(max_n)

 설명

먼저 입력받은 숫자들 중 3가지 카드를 구해야하므로 조합 라이브러리인 combination을 사용하여 조합의 수를 구한다.

후에 for문을 통해 조합 요소들의 합을 구한 후(뽑은 3장의 카드들의 합)

해당 리스트 요소의 최대값을 max()가 아니라 for문을 통해 직접 구해야한다.

이떄 조건은 max_n이 전 카드들의 합보다 커야하지만 m보다는 작거나 같아야 한다.

이렇게 max_n을 구한 후 출력하면 m에 가장 가까운 3장의 카드의 합이 구해진다.


후기

최대 합을 구하는 부분에서 한시간 정도는 삽질했다...

max_n을 새로 할당하는 것과 max_n < i < m 를 생각해내지 못해서 코드만 엄청 길게 구구절절 짜다가 계속 틀렸다..

원래는 sum_combi를 m에서 뺀 값을 새로운 리스트에 저장하고 이 리스트 중에서 0 이상인 값의 인덱스를 구해 그 인덱스를 가지고 sum_combi에서 값을 구하는... 엄청난 구구절절이었는데 이 모든걸 max_n < i < m 조건 한 줄로 줄일 수 있었다.😂

반응형
Comments