티스토리 뷰
728x90
반응형
문제
코드
N, M = map(int,(input().split()))
d = list(map(int, input().split())) # 카드 리스트
result = 0
Max = 0
for i in range(N-2): # 3중 for문을 돌면서 겹치지 않게 범위를 지정
for j in range(i+1,N-1):
for k in range(j+1,N):
if d[i]+d[j]+d[k] > M: # 3개의 값 더한것이 M보다 크다면 넘어감
continue
else:
result = d[i]+d[j]+d[k]
if Max <= result: # M과 가장 유사한 값은 가장 큰값이기 때문에 비교해서 큰값을 저장
Max = result
print(Max)
코드설명
카드 리스트를 받아서 겹치지 않게 3장을 뽑아 M보다 크지 않으면서 가장 가까운 값을 찾아야한다.
3장을 뽑아야 하기 때문에 3중for문을 돌고 겹치지않게 뽑기위해 처음 for문은 N-2전까지 다음 for문은 i값보다 1크면서 N-1전까지 돌고 마지막 for문은 j보다 1크면서 N전까지 돌게 범위를 잡는다.
합이 M보다 크다면 넘어가고 합이 M보다 작거나 같으면서 가장 큰값을 저장해둔다음 출력해준다.
다른풀이
from itertools import combinations
n, m = map(int,input().split())
card = list(map(int, input().split()))
com = list(combinations(card, 3))
total = 0
for i in com:
if sum(i) <= m:
total = max(total, sum(i))
print(total)
combinations를 이용하여 조합을 구한다음 조합에 합이 m이랑 같거나 작은값들 중에서 가장 큰값을 구한다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1541번 잃어버린 괄호 (Python) (0) | 2021.03.16 |
---|---|
[백준] 2231번 분해합 (Python) (0) | 2021.03.15 |
[백준] 2108번 통계학 (Python) (0) | 2021.03.15 |
[백준] 1260번 DFS와 BFS (Python) (0) | 2021.03.14 |
[백준] 4949번 균형잡힌 세상 (Python) (0) | 2021.03.14 |
댓글