반응형
문제
https://www.acmicpc.net/problem/2798
풀이
단순하게 3중 반복문을 사용해 완전 탐색으로 풀었다.
n,m = map(int,input().split()) card = list(map(int,input().split())) ans = 0 for i in range(0,n-2): for j in range(i+1,n-1): for k in range(j+1,n): sum = card[i] + card[j] + card[k] if sum > m: continue else: ans = max(ans, sum) print(ans)
한 번 반복할 때 마다 카드 3장의 합이 넘으면 안 되는 수 m 보다 작은지 확인하고
작다면 작은 합들 중 가장 큰 합을 ans에 저장한다.
하지만 문제의 알고리즘 분류가 브루트포스 이기 때문에
combinations()를 사용해서도 풀어보자.
from itertools import combinations n,m = map(int, input().split()) card = list(map(int, input().split())) ans = 0 for i in combinations(card, 3): if ans < sum(i) <= m: ans = sum(i) print(ans)
combinations()는 리스트 내의 모든 조합을 나타낼 수 있다.
combinations(리스트, 인자 값)
combinations() 함수를 사용해 더 간단하게 풀 수 있다.
반응형
'Python 코딩테스트' 카테고리의 다른 글
[백준] 2606 바이러스 파이썬 DFS/BFS (0) | 2022.09.27 |
---|---|
[백준] 5525 IOIOI 파이썬 (0) | 2022.09.21 |
[프로그래머스] 프린터 (1) | 2022.09.13 |
[프로그래머스] 더 맵게 (0) | 2022.09.09 |
그리디: 백준 1783 병든 나이트 파이썬 (0) | 2022.09.07 |