STUDY/Algorithm

[백준] 2798 블랙잭

sinawi95 2021. 1. 30. 07:09
728x90
N, M = map(int,input().split()) 
cards = list(map(int,input().split()))

card_list = [(cards[x]+cards[y]+cards[z]) for x in range(len(cards)) \
    for y in range(len(cards)) for z in range(len(cards)) if x < y < z]

print(max([x for x in card_list if x <= M]))

카드를 입력받고 세가지 카드로 만들수 있는 모든 경우의 수를 리스트로 만들었다.

리스트에서 M보다 작은 것을 값들을 리스트로 다시 만들고 그 중에서 최댓값을 출력했다.

 


이걸 사용하면 조금 더 쉽게 만들수 있을 것이다.

from itertools import permutations
itertools.permutations(iterable, r=None)
# iterable에서 요소의 연속된 길이 r 순열을 반환합니다.
# r이 지정되지 않았거나 None이면, 
# r의 기본값은 iterable의 길이이며 가능한 모든 최대 길이 순열이 생성됩니다.

from itertools import combinations
itertools.combinations(iterable, r)
# 입력 iterable에서 요소의 길이 r 서브 시퀀스들을 반환합니다.
# 조합(combination) 튜플은 입력 iterable의 순서에 따라 사전식 순서로 방출됩니다.
# 따라서, 입력 iterable이 정렬되어있으면, 조합 튜플이 정렬된 순서로 생성됩니다.

docs.python.org/ko/3.8/library/itertools.html

 

itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 — Python 3.8.7 문서

 

docs.python.org

 

'STUDY > Algorithm' 카테고리의 다른 글

[백준] 1475 방 번호  (0) 2021.01.30
[백준] 1075 나누기  (0) 2021.01.30
[백준] 1339 단어 수학  (0) 2021.01.30
[백준] 4673 셀프 넘버  (0) 2021.01.30
[백준] 1110 더하기 사이클  (0) 2021.01.30