Problem: https://www.acmicpc.net/problem/2798
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
- 그 동안 학과 수업에 바빠서, 자바에 빠져 허우적 대던 차에 파이썬 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하여 식을 훨씬 간단하게 만들었다.
- 처음에 list형태로 입력값들을 받아준다.
- combinationd으로 3개를 뽑는다. (이 경우 모든 경우를 포함한다.)
- 세 개의 가장 큰 합이 주어진 숫자보다 작은 경우에 해당 식이 성립한다.
- 처음에 반복문을 세 개를 돌려야 한다고 생각했는데, 그럴 필요없이 파이썬의 내장 라이브러리 함수를 사용하여 쉽게 만들 수 있었다. (역시 파이썬이 짱!)
'Programming > 1 Day 1 Commit' 카테고리의 다른 글
[BaekJoon] 지구온난화 - 실버2 (Python3) (0) | 2024.02.15 |
---|---|
[HackerRank] Find the Runner-Up Score! (Python3) (0) | 2023.09.05 |
[Programmers] 자연수 뒤집어 배열로 만들기 (0) | 2023.02.10 |
[HackerRank] Birthday Cake Candles (Python3) (0) | 2023.02.06 |
[LeetCode] Add Two Numbers (Python3) (0) | 2023.01.31 |