[Algorithm]BJ_2798 블랙잭

dnjsrms.lee·2022년 6월 3일
0

Algorithm

목록 보기
1/3
post-thumbnail

[BJ_2798]블랙잭 | 누르면 해당 문제로 이동

Brute Force : 무식한 힘. 즉, 계속해서 대입해가며 풀어가는 방법이다.

전체 카드(N)에서 3개를 고를 수 있는 경우의 수를 탐색하여 경우 별로 선택한 카드의 합을 모두 구한 뒤, 주어진 M을 넘지 않는 최댓값을 찾으면 된다.

3중 for문을 돌리면 간단하게 풀 수 있다.

방법은 여러가지가 있겠지만, 나는 Scanner 보다 속도가 빠른 BufferedReader를 사용하여 풀어보았다.

❗풀이

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

public class BJ_2798 {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[] arr = new int[N];

        st = new StringTokenizer(br.readLine(), " ");
        for(int i = 0; i < N; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int result = search(arr, N, M);
        System.out.println(result);
    }
    
    static int search(int[] arr, int N, int M) {

        int result = 0;
     
        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++){
                	// sum 세개의 카드 합
                    int sum = arr[i] + arr[j] + arr[k];
                    if (M == sum){
                        return sum;
                    }
                    if (result < sum && sum < M){
                        result = sum;
                    }
                }
            }
        }
        return result;
    }
}
profile
little by little slowly

0개의 댓글