본문 바로가기

[BOJ] - JAVA

[백준] 2798 : 블랙잭 JAVA 풀이

 

이번 문제는 별로 어렵지 않았다.

입력은 첫 번째 줄에 카드의 장수 N, 만들어야 할 수 M

그 다음줄에 N장의 숫자가 주어지는데 이는 StringTokenizer를 이용해서 입력받았다.

 

매번 세 카드의 합을 저장하는 sum과

그 세 카드의 합 중에서 M과 가장 가까운 값을 저장하는 max라는 변수를 사용했다.

반복문을 다 끝내고나면 max를 출력하는 식으로 코드를 짰다.

 

 

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.StringTokenizer;
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 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 sum = 0;
        int max = -1;
        loop: // 반복문을 한번에 탈출하기 위해서 이름을 붙임
        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 = arr[i]+arr[j]+arr[k];
                    if(sum==M){
                    // 세 카드의 합이 M이라면
                        max = sum; // max값을 업데이트하고
                        break loop; // 삼중반복문 탈출
                    }
                    // 세 카드의 합이 M은 아니지만 지금까지 합들 중 M과 가장 가깝다면
                    if(max<sum&&sum<M) max = sum; // max값 업데이트
                  }
            }
        }
        System.out.println(max);
    }
    
}