미소를뿌리는감자의 코딩

[백준 2024/01/22] 2798번 블랙잭 본문

코딩 테스트/백준

[백준 2024/01/22] 2798번 블랙잭

미뿌감 2024. 1. 22. 14:27
728x90

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

 

2798번: 블랙잭

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

www.acmicpc.net

 

1. 접근 방법

이번 문제는 brute force 알고리즘 인 만큼 하나하나 확인해나가며 풀면 되는 문제였다.

따라서, 순차적으로 숫자들을 돌아가면서, 더해주었고

기준이 되는 수보다 값이 작거나 같을 시에는 최대 힙에다가 넣어주었다.

 

마지막에는 최대힙의 루트를 출력하며 마무리 해주었다.

 

rough draft

 

2. 코드

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

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

        List<Integer> list = new ArrayList<>();

        PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String line = reader.readLine();
        String[] num_limit = line.split("\\s+");

        int num = Integer.parseInt(num_limit[0]);
        int orig_limit = Integer.parseInt(num_limit[1]);

        String numbs = reader.readLine();
        String[] list_before = numbs.split("\\s+");

        for (int i=0; i<num; i++) {
            list.add(Integer.parseInt(list_before[i]));
        }

        int size = list.size();
        int i = 0;
        int k = 1;
        int j = 2;
        int result;

        while(i!=size-3|| k!=size-2|| j!=size-1){
            result = list.get(i) + list.get(k) + list.get(j);
            if(result<=orig_limit){
                maxHeap.add(result);
            }

            if(j==size-1){
                if(k==size-2){
                    i++;
                    k = i+1;
                    j = k+1;
                }
                else{
                    k++;
                    j = k+1;
                }
            }
            else{
                j++;
            }
        }

        result = list.get(i) + list.get(k) + list.get(j);
        if(result<=orig_limit){
            maxHeap.add(result);
        }

        System.out.println(maxHeap.remove());
    }

}
728x90