본문 바로가기
Algorithm/백준풀이

[알고리즘 문제풀이] 백준 2798 블랙잭 /JAVA

by 계범 2022. 1. 30.

https://www.acmicpc.net/problem/2798

 

2798번: 블랙잭

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

www.acmicpc.net

import java.util.*;
import java.io.*;

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

        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        
        int cardNum = Integer.parseInt(st.nextToken());
        int wantNum = Integer.parseInt(st.nextToken());
        
        StringTokenizer st2 = new StringTokenizer(br.readLine()," ");

        int[] arr = new int[cardNum];
        
        // 입력값 받기
        for(int i = 0; i < cardNum; i++){
            arr[i] = Integer.parseInt(st2.nextToken());
        }
        
        // 정렬
        Arrays.sort(arr);

        int answer = 0;
        
        // 3개의 카드 선택
        stop:for(int i = 0; i < cardNum-2; i++){
            for(int j = i+1; j < cardNum-1; j++){
                for(int k = j+1; k < cardNum; k++){
                    int checkNum = arr[i]+arr[j]+arr[k];
                    
                    // 원하던 숫자에 딱 맞으면
                    if(checkNum == wantNum){
                        answer = checkNum;
                        break stop;
                    // 원하던 숫자 아래면서 현재 저장된 숫자보다 클시에
                    }else if(checkNum < wantNum && checkNum > answer){
                        answer = checkNum;
                    }
                }
            }
        }

        System.out.println(answer);
    }
}

댓글