알고리즘/백준

BOJ) 블랙잭

Zin0_0 2020. 6. 23. 13:33
반응형

블랙잭

 

2798번: 블랙잭

문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 ��

www.acmicpc.net

풀이

 

dp로 풀까 생각하다가, 고려할 사항이 많아질 것 같아서 모든 경우에 따라 최대 값을 구하기로 했다.

앞에서 부터 3장의 카드를 고르고, 해당 숫자가 m 이하일 경우에 최대 값을 갱신해줬다.

3중 포문은 돌리기 싫었지만, 좋은 방법이 떠오르지 않았다.. ㅠㅠ

 

코드

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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

        StringTokenizer st = new StringTokenizer(br.readLine());

        int[] cardArr = new int[Integer.parseInt(st.nextToken())];
        int m = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine());

        for(int i=0; i<cardArr.length; i++) {
            cardArr[i] = Integer.parseInt(st.nextToken());
        }

        System.out.println(solution(cardArr, m));

        br.close();
    }

    private static int solution(int[] cardArr, int m) {
        int answer =0;
        for(int i=0; i<cardArr.length-2; i++) {
            for(int j=i+1; j<cardArr.length-1; j++) {
                for(int k=j+1; k<cardArr.length; k++) {
                    int sum =cardArr[i] + cardArr[j] + cardArr[k];
                    if(sum <= m) {
                        answer = Math.max(answer, sum);
                    }
                }
            }
        }

        return answer;
    }
}
반응형