알고리즘 풀이/백준

[백준 2789] 블랙잭

mhko411 2021. 1. 26. 11:24
728x90

문제

정수가 적혀있는 n개의 카드 중 3장을 골라서 더했을 때 m이하의 값 중 최댓값을 출력한다.

 

입력

카드의 개수 n과 합 m을 입력 후에

n개의 카드에 적혀있는 정수를 입력한다.

 

출력

m이하의 수 중 최댓값을 출력한다.


n은 3이상 100이하라는 조건이 있다. n개의 카드 중 중복없이 3장의 카드를 선택해야하기 때문에 최대 100 x 99 x 98 = 970,200의 경우의 수가 나온다. 따라서 충분히 모든 경우의 수를 고려할 수 있기 때문에 완전탐색을 통해 풀어본다.

1. 3개의 for문을 통해 3장의 카드를 선택하는 경우의 수를 조합한다.

2. 이때 중복을 제거하기 위해 각각의 range()를 다르게했다.

3. 마지막 for문에서 선택한 인덱스의 수를 모두 더한다.

4. 현재 최댓값보다 크고 m이하인 수가 있으면 업데이트한다. 

 

n,m=map(int,input().split())
numbers=list(map(int,input().split()))
result=-1
for x in range(0,n):
    total=0
    for y in range(x+1,n):
        for z in range(y+1,n):
            total=numbers[x]+numbers[y]+numbers[z]
            if total>=result and total<=m:
                result=total
print(result)

'알고리즘 풀이 > 백준' 카테고리의 다른 글

[백준 7568] 덩치 cpp-py  (0) 2021.01.26
[백준 2231] 분해합 cpp-py  (0) 2021.01.26
[백준 2309] 일곱 난쟁이  (0) 2021.01.26
[백준 1152] 단어의 개수  (0) 2021.01.23
[백준 1157] 단어 공부  (0) 2021.01.23