https://www.acmicpc.net/problem/2798
합의 경우의 수를 구해야 한다..
for문과 list를 사용해서 경우의 수를 구할 수 있지만
순열과 조합 함수가 있던 것이 기억났다.
그렇지만 제대로 어떻게 쓰는지 몰라서 찾아봤다.
순열 (nPr)- permutations
순열이란 서로 다른 n개중에 r개를 선택하는 경우의 수를 의미한다. (순서 상관 있음)
조합 (nCr)- combinations
조합이란 서로 다른 n개중에 r개를 선택하는 경우의 수를 의미한다. (순서 상관 없음)
- 첫번째 인자는 조합할 요소들이 들어있는 list, tuple과 같은 컨테이너 타입의 변수이고 두번째 인자는 몇 개로 조합할지 나타내는 변수이다.
permutations의 경우에는 두 번째 인자를 할당하지 않으면 첫 번째 인자의 전체의 길이가 기본값으로 설정된다. - permutations 에 itertools.permutations object, combinations 에 itertools.combinations object가 반환되기 때문에 출력하기 위해서 list와 같은 형태로 변환해야한다.
이 문제는 카드의 합만 구하는 것이기에 combinations를 사용
from itertools import combinations
n, m = map(int, input().split()) # m=카드 개수, m=카드 합
card = list(map(int, input().split())) # 카드 리스트 생성
ans = 0 # 최대 합 초기화
# 리스트에서 3개의 숫자를 선택하는 모든 조합을 생성하여 순회
for i in combinations(card, 3):
current_sum = sum(i) # 현재 조합의 합 계산
if current_sum <= m:
ans = max(ans, current_sum) # m을 넘기지 않으면서 가장 큰 카드 합
print(ans)
'프로그래머스, 백준' 카테고리의 다른 글
백준 1011번 Fly me to the Alpha Centauri (0) | 2024.10.02 |
---|---|
백준 1932번 정수 삼각형 (0) | 2024.09.25 |
백준 2231번 분해합 (0) | 2024.05.08 |
백준 9095번 1,2,3 더하기 (1) | 2024.05.01 |
백준 2775번 부녀회장이 될테야 (1) | 2024.05.01 |