본문 바로가기
Algorithm

백준 2798번 블랙잭

by 2nyong 2023. 3. 13.

블랙잭은 주어진 몇 장의 카드 중에서 3장을 조합해 특정 최대값(M)을 넘지 않으면서 가장 근접한 카드합을 출력하는 문제다.

 

3중 반복문(for)을 사용해 문제를 해결하였다. 중복된 카드 뽑기를 허용하지 않으므로, 각 반복문의 인덱싱에 주의하자.

 

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        int N = in.nextInt();
        int M = in.nextInt();

        int[] cards = new int[N];
        for (int i = 0; i < N; i++) {
            cards[i] = in.nextInt();
        }

        int oldSum = 0; // 이전에 뽑은 카드의 합
        int newSum = 0; // 지금 뽑은 카드의 합

        int firstCard;
        int secondCard;
        int thirdCard;

        for (int i = 0; i < N-2; i++) {
            firstCard = cards[i];

            for (int j = i + 1; j < N-1; j++) {
                secondCard = cards[j];

                for (int k = j + 1; k < N; k++) {
                    thirdCard = cards[k];

                    newSum = firstCard + secondCard + thirdCard;

                    if (M - newSum >= 0) { // 카드의 합은 최대값을 넘을 수 없다.
                        // 지금 뽑은 카드의 합이 최대값에 더 가깝다(차가 적다)면
                        if ((M - oldSum) > (M - newSum)) {
                            oldSum = newSum; // oldSum을 newSum으로 갱신한다.
                        }
                    }
                }
            }
        }
        System.out.println(oldSum);
    }
}

 

'Algorithm' 카테고리의 다른 글

백준 1010번 다리 놓기  (0) 2023.03.14
백준 2231번 분해합  (0) 2023.03.13
백준 1436번 영화감독 숌  (0) 2023.03.11
백준 1934번 최소공배수  (0) 2023.03.11
백준 11399번 ATM  (0) 2023.03.11

댓글