자료구조&알고리즘/백준

[백준] 블랙잭 2798번 (PYTHON)

고쩡이 2024. 3. 7. 11:12

✔ 문제 2798 블랙잭

문제 바로가기 💨 

 

2798번: 블랙잭

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

www.acmicpc.net

 

핵심 아이디어

브루트 포스로 완전탐색한다. ans = 0 으로 초기값을 두고, 모든 경우의 수를  탐색하며 ans보다 크고 범위내 숫자라면 갱신한다.

 

PYTHON

N, M = map(int, input().split())
lst = list(map(int, input().split()))

ans = 0
for i in range(N-2):
    for j in range(i+1, N-1):
        for k in range(j+1, N):
            if ans<lst[i]+lst[j]+lst[k]<=M:
                ans = lst[i]+lst[j]+lst[k]
print(ans)

JAVA

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // N, M 입력
        int N = scanner.nextInt();
        int M = scanner.nextInt();

        // 정수 리스트 입력
        int[] lst = new int[N];
        for (int i = 0; i < N; i++) {
            lst[i] = scanner.nextInt();
        }

        int ans = 0;

        // 세 개의 정수를 조합하여 합이 M 이하인 경우 중 최대값 찾기
        for (int i = 0; i < N - 2; i++) {
            for (int j = i + 1; j < N - 1; j++) {
                for (int k = j + 1; k < N; k++) {
                    int sum = lst[i] + lst[j] + lst[k];
                    if (ans < sum && sum <= M) {
                        ans = sum;
                    }
                }
            }
        }

        System.out.println(ans);
    }
}