🧩 Programming Languages/Python CodingTest

백준 2798번(bronze 2) : 블랙잭 (조합-combination)

복숭아아이스티에샷추가 2023. 12. 11. 15:00
 

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는 동일한 것으로 취급한다.

이러한 둘의 특징을 고려하고 적절하게 사용하면 될 것 같다.