https://www.acmicpc.net/problem/2798
둘째줄에 주어진 수들 중 세 수를 뽑아 합을 정해진 수에 가장 가깝게 만들면 된다.
1
2
3
4
5
6
7
8
9
10
|
N, M = map(int, input().split())
numbers = list(map(int, input().split()))
blackjack = 0
for i in range(N-2):
for j in range(i+1, N-1):
for k in range(j+1, N):
sum = numbers[i] + numbers[j] + numbers[k]
if sum > M : continue
elif sum >= blackjack: blackjack = sum
print(blackjack)
|
cs |
두번째 줄에서 입력받을 숫자 N, 한도 M을 입력받고, 엔터로 구분된 두번째 줄에 입력받는 숫자들은 numbers 배열에 입력한다.
합을 구하기 때문에 숫자들의 순서는 상관없이 뽑으면 된다.
맨 첫번째 조합은 (1), (2), (3)번째 숫자들을 고르는 경우이고, 맨 마지막 조합은 (N-2), (N-1), (N)번째 숫자들을 고르는 경우이다. 이를 바탕으로 for문을 3중으로 만들고, sum을 구해서 M보다 작은 수 중에 가장 큰 수를 blackjack에 입력하도록 했다.
다섯가지 수를 입력한 경우, 위와 같이 i, j, k번째 수들이 선택되어 sum을 구하는 것을 확인할 수 있다.
'알고리즘' 카테고리의 다른 글
백준 알고리즘(파이썬) - 7568번 (0) | 2021.08.23 |
---|---|
백준 알고리즘(파이썬) - 2231번 (0) | 2021.08.23 |
백준 알고리즘(파이썬) - 11729번 (0) | 2021.08.18 |
백준 - 2447번 / map(), join() (0) | 2021.08.17 |
백준 - 10870번 (0) | 2021.08.13 |