2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
인터넷을 참고하여 작성한 코드
from itertools import combinations
n, m = map(int, input().split())
card = list(map(int, input().split()))
com_card = list(combinations(card, 3))
max_sum = 0
for i in com_card:
if sum(i) <= m:
max_sum = max(max_sum, sum(i))
print(max_sum)
처음 이 문제를 풀려고 할 때 for문을 3번 중첩해야 풀 수 있다는 것을 알게되었고, 이건 좀 아닌 것 같아 싶어서 그냥 바로 인터넷에 검색해보았다. 그런데 이러한 조합 문제를 풀 때 쉽게 해결할 수 있는 파이썬의 itertools의 combinations을 알게되었다.
이와 비슷한 순열 또한 알게 되었다. permutations 으로, 사용은 combinations와 동일하게 사용하면된다.
둘의 차이는 permutations은 (a, b) 와 (b, a)를 다른 것으로 인식하지만, combinations는 동일한 것으로 취급한다.
이러한 둘의 특징을 고려하고 적절하게 사용하면 될 것 같다.
'🧩 Programming Languages > Python CodingTest' 카테고리의 다른 글
백준 정렬 문제 모음(2587, 25305, 2751, 1427, 11650, 11651, 1181) (1) | 2024.01.08 |
---|---|
백준 2750번(bronze 2) : 수 정렬하기 (2) | 2024.01.07 |
백준 단계별 풀기 - 시간복잡도 풀이 모음 (0) | 2023.12.08 |
백준 2563번(silver 5) : 색종이 (0) | 2023.12.07 |
백준 10798번(bronze 1) : 세로읽기 (1) | 2023.12.07 |