Algorithm/BaekJoon
백준 21.12.19. 2798번 - 블랙잭
HappyFrog
2021. 12. 19. 22:48

N, M = map(int, input().split())
cards = list(map(int, input().split()))
result = 0
for i in range(N):
for j in range(i+1, N):
for k in range(j + 1, N):
if cards[i] + cards[j] + cards[k] > M:
continue
else:
result = max(result, cards[i] + cards[j] + cards[k])
print(result)
- 카드를 세개를 골라야하며 모두 확인해야 하기 때문에 반복문을 3개 중첩하여 실행합니다.
- 중첩이 될 때마다 시작 인덱스의 범위가 1씩 늘어나는 이유는 카드가 겹치면 안되기 때문입니다.
- 따라서 서로다른 세장의 카드를 일일히 확인하여 만약 주어진 M보다 크다면 결과를 내지 않고 그대로 검색을 진행합니다.
- 하지만 M보다 작은 결괏값이 나온다면 기존의 result값과 새로 검색된 값 중에서 더 큰 수를 result로 저장합니다.
- 반복문이 모두 끝나면 주어진 모든 경우의 수를 확인한 것이기 때문에 result를 출력해주면 됩니다.