[백준 2798 파이썬] - 블랙잭

zsunny·2022년 7월 4일
0

📌 문제

💯 정답

• 방법 1. 성공!!

from itertools import combinations

n, m = map(int, input().split())
cards = list(map(int, input().split()))
sums = []

for i in combinations(cards, 3):	// cards에서 3개 조합 뽑음
    if sum(i) <= m:					// m보다 작거나 같으면
        sums.append(sum(i))			// sums리스트에 3개의 합을 추가하고
    else:
        continue

print(max(sums))					// 제일 작은 값 출력

• 방법 2. 성공!!  **시간단축**

from itertools import combinations

n, m = map(int, input().split())
cards = list(map(int, input().split()))
cards.sort()
maxValue = 0							// 최댓값 초기화 0

for i, j, k in combinations(cards, 3):	// cards에서 3개 조합 뽑음
    if maxValue < i+j+k <= m:			// 3개의 합이 m보다는 작거나 같으면서 기존 최댓값보다 크면
        maxValue = i+j+k				// 최댓값으로 업데이트

print(maxValue)

📝 설명

• 방법1과 방법2 모두 성공이다.
  하지만, 방법1은 sum연산을 하고 max연산을 한번더 해야해서 그런지 방법2의 경우가 시간이 더 적게 걸린다.

⭐️ 알고가기 _ itertools 모듈

👉 itertools 모듈의 순열과 조합함수 설명 바로가기

profile
매일 성장하는 예비 웹 개발자 🌱

0개의 댓글