새소식

Programming/1 Day 1 Commit

[BaekJoon] 2798번: 블랙잭 (Python3)

  • -
  • 그 동안 학과 수업에 바빠서, 자바에 빠져 허우적 대던 차에 파이썬 1 day 1 commit을 지키지 못했다..
  • 모든 것은 핑계일 뿐, 내 자신 반성해 ㅠ
  • 그래도 오랜만에 돌아왔으니 조금은 어려운 문제로 돌아왔다.

  • 문제 자체는 어려운 것이 없다.
  • 주어진 배열로 처리한 숫자들중에 가장 큰 합은 구하는데, 이것이 주어진 숫자보다 작아야 한다는 점.
  • 알고리즘을 잘 생각하면 풀 수 있을 것도 같은데....?
  • 첫 시도는 무참히 런타임 에러.. 다른 분의 코드를 참고하여 답안을 작성하였다.
 
from itertools import combinations

card_num, target_num = map(int, input().split())
card_list = list(map(int, input().split()))
biggest_num = 0

for cards in combinations(card_list, 3):
    temp_sum = sum(cards)
    if biggest_num < temp_sum <= target_num:
        biggest_num = temp_sum
print(biggest_num)
 
  • combination을 import하여 식을 훨씬 간단하게 만들었다.
  1. 처음에 list형태로 입력값들을 받아준다.
  2. combinationd으로 3개를 뽑는다. (이 경우 모든 경우를 포함한다.)
  3. 세 개의 가장 큰 합이 주어진 숫자보다 작은 경우에 해당 식이 성립한다.
  • 처음에 반복문을 세 개를 돌려야 한다고 생각했는데, 그럴 필요없이 파이썬의 내장 라이브러리 함수를 사용하여 쉽게 만들 수 있었다. (역시 파이썬이 짱!)
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.