알고리즘

[알고리즘 / 백준] 2798 - 블랙잭

DevBee 2020. 11. 8. 14:12

 

문제는 위와 같으며 우선 주어지는 카드의 수가 100 이하이기 때문에 단순하게 모든 경우의 수를 다 구하는 3중 for 문을 사용하여 문제를 풀었습니다.

 

파이썬 코드는 다음과 같습니다.

from sys import stdin

N, M = map(int, stdin.readline().split())
cards = list(map(int, stdin.readline().split()))

result = 0
length = len(cards)

for i in range(length):
    for j in range(i+1, length):
        for k in range(j+1, length):
            tmp = cards[i] + cards[j] + cards[k]

            if M >= tmp > result:
                result = tmp

print(result)

 

자바 코드는 다음과 같습니다.

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] nm = br.readLine().split(" ");
        int N = Integer.parseInt(nm[0]);
        int M = Integer.parseInt(nm[1]);
        int[] cards = new int[N];
        String[] inputs = br.readLine().split(" ");

        for (int i = 0; i < cards.length; i++) {
            cards[i] = Integer.parseInt(inputs[i]);
        }

        int result = 0;
        for (int i = 0; i < cards.length; i++) {
            for (int j = i + 1; j < cards.length; j++) {
                for (int k = j + 1; k < cards.length; k++) {
                    int sum = cards[i] + cards[j] + cards[k];
                    if (sum <= M && sum > result) {
                        result = sum;
                    }
                }
            }
        }

        System.out.println(result);
    }
}