알고리즘

백준 알고리즘(파이썬) - 2798번

joy_lee 2021. 8. 23. 21:08

https://www.acmicpc.net/problem/2798

 

2798번: 블랙잭

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장

www.acmicpc.net

둘째줄에 주어진 수들 중 세 수를 뽑아 합을 정해진 수에 가장 가깝게 만들면 된다.

 

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