코린이의 소소한 공부노트

[백준 온라인 저지] 2798. 블랙잭 본문

코딩테스트 풀이/JAVA

[백준 온라인 저지] 2798. 블랙잭

무지맘 2023. 4. 7. 13:02

- 입력: 첫째 줄에 카드의 개수 N(3 N 100)M(10 M 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.

 

- 출력: 첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다.

 

import java.util.*;
import java.io.*;
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer token = new StringTokenizer(br.readLine());
        int[] nums = new int[Integer.parseInt(token.nextToken())];
        int m = Integer.parseInt(token.nextToken()), answer = 0;
        token = new StringTokenizer(br.readLine());
        for(int i=0 ; i<nums.length ; i++)
            nums[i] = Integer.parseInt(token.nextToken());
        
 Loop1: for(int i=0 ; i<nums.length-2 ; i++)
            for(int j=i+1 ; j<nums.length-1 ; j++)
                for(int k=j+1 ; k<nums.length ; k++){
                    int sum = nums[i]+nums[j]+nums[k];
                    if(sum==m){
                        answer = m;
                        break Loop1;
                    }                        
                    else if(sum<m && Math.abs(sum-m)<Math.abs(answer-m))
                        answer = sum;
                }
        System.out.print(answer);
    }
}