본문 바로가기

백준

백준 문제 풀이 JAVA | 2798번

2798번: 블랙잭 (acmicpc.net)

 

2798번: 블랙잭

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

www.acmicpc.net

 

정답

import java.io.*;
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 [] array = new int[n];
    
        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < n; i++){
            array[i] = Integer.parseInt(st.nextToken());
        }
        System.out.println(start(array, n, m));
    }
    public static int start(int[] arr, int N, int M) {
		int result = 0;
		for (int i = 0; i < N - 2; i++) {
			if(arr[i] > M) continue;    //첫번째 카드가 M보다 클 경우
			for (int j = i + 1; j < N - 1; j++) {
				if(arr[i] + arr[j] > M) continue;    //합친 결과가 M보다 클 경우
				for (int k = j + 1; k < N; k++) {
					int temp = arr[i] + arr[j] + arr[k];
					if (M == temp) {	//합이 M과 같을 경우 바로 반환
						return temp;
					}
                    if(result < temp && temp < M) {    //이전 결과보다 M 근사치인 경우 result에 저장
						result = temp;
					}
				}
			}
		}
		return result;    //가장 근사치인 result 반환
	}
}

 

if(M == temp) return temp;

if(result < temp && temp < M) result = temp; 대신 Math.max() 메소드를 이용할 수 있다. Math.max()메소드는 두 인자 중 최댓값을 찾는 계산을 한다.

if(temp <= M) result = Math.max(result, temp);

'백준' 카테고리의 다른 글

백준 문제 풀이 19532 | JAVA  (0) 2024.06.24
백준 문제 풀이 JAVA | 1436번  (0) 2024.03.03
백준 문제 풀이 JAVA | 10798번  (0) 2024.03.03
백준 문제 풀이 JAVA | 2738번  (0) 2024.03.03
백준 문제 풀이 JAVA | 10988  (0) 2024.02.24