■ 2798번 블랙잭 문제
■ 코드 풀이
저는 이 문제를 itertools 라이브러리를 활용하여 풀었습니다. itertools는 여러 반복적인 작업을 하는 경우에 굉장히 유용하게 활용할 수 있는 라이브러리입니다. 상세 설명은 아래 링크를 확인해 주세요.
https://docs.python.org/ko/3.8/library/itertools.html
itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 — Python 3.8.16 문서
itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 이 모듈은 APL, Haskell 및 SML의 구성물들에서 영감을 얻은 여러 이터레이터 빌딩 블록을 구현합니다. 각각을 파이썬에 적합한 형태로
docs.python.org
itertools 라이브러리에는 combination이라는 메서드가 있습니다. 이 메서드는 반복 가능한 객체에서 r개의 조합을 반환해 줍니다. 아래 코드를 살펴보겠습니다. 우선 숫자들의 list를 num_list에 받고 target 숫자를 M이라고 선언합니다.
그리고 N개의 idx_list를 만듭니다. 그리고 combination 메서드에 idx_list와 3을 인자로 넣어주면, idx_list에서 가능한 모든 조합이 반환됩니다. 예컨대 (0,1,2), (0,1,3),... (1,2,3), (1,2,4),... 등이 반환되는 셈입니다. 이 메서드를 활용하면 모든 조합의 경우의 수를 고려할 수 있습니다.
이렇게 index 조합을 활용하여 num_list를 lndexing 하면서 'M'과 가장 가까운 값을 찾아내면 됩니다.
import itertools
N, M = map(int, input().split())
num_list = list(map(int, input().split()))
idx_list = [i for i in range(N)]
#combination_list = []
best_value = 9999999
for a,b,c in itertools.combinations(idx_list,3):
value = num_list[a] + num_list[b] + num_list[c]
if M - value < 0:
continue
if best_value >= M-value:
best_value = M-value
result = value
print(result)
'코딩 테스트 > Python_백준' 카테고리의 다른 글
[백준/Python] 19532번 수학은 비대면강의입니다 문제 (0) | 2023.05.04 |
---|---|
[백준/Python] 2231번 분해합 문제 (0) | 2023.05.03 |
[백준/Python] 24313번 알고리즘 수업 - 점근적 표기 1 문제 (0) | 2023.05.01 |
[백준/Python] 24267번 알고리즘 수업 - 알고리즘의 수행 시간 6 문제 (0) | 2023.04.30 |
[백준/Python] 24266번 알고리즘 수업 - 알고리즘의 수행 시간 6 문제 (0) | 2023.04.29 |
댓글