마이라이프해피라이프

[알고리즘 스터디] 백준 2798번 Python 풀이 - 블랙잭 본문

컴퓨터/Python

[알고리즘 스터디] 백준 2798번 Python 풀이 - 블랙잭

YONJAAN 2022. 6. 3. 03:59

# 문제 

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

 

2798번: 블랙잭

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

www.acmicpc.net


# 코드 풀이

def solve():
    n, m = map(int, input().split())
    input_list = []
    sum_list = []

    input_list = list(map(int, input().split()))

    for i in range(2, n):
        for j in range(1, i):
            for k in range(0, j):
                sum = input_list[i] + input_list[j] + input_list[k]
                if sum == m:
                    return m
                elif sum < m:
                    sum_list.append(sum)

    sum_list.sort()
    return sum_list[-1]


result = solve()

print(result)

# 설명 

 

for문만 적절히 쓸 수 있으면 풀 수 있는 문제. 해당되는 경우를 찾기 위해 모든 값을 계산함. 


# 새롭게 알게된 개념 - 브루트 포스 

 

→ 무식한 힘. 무식하게 모든 경우의 수를 탐색하면서 요구조건에 충족되는 결과만을 가져옴.

→ 완전 탐색 알고리즘. 해가 존재할 것으로 예상되는 모든 영역을 전체 탐색함.

  • 순차 탐색
  • 깊이 우선 탐색
  • 너비 우선 탐색

브루트 포스는 모든 경우의 수를 탐색하는것이 중요