코딩 테스트/백준
[백준 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 알고리즘 인 만큼 하나하나 확인해나가며 풀면 되는 문제였다.
따라서, 순차적으로 숫자들을 돌아가면서, 더해주었고
기준이 되는 수보다 값이 작거나 같을 시에는 최대 힙에다가 넣어주었다.
마지막에는 최대힙의 루트를 출력하며 마무리 해주었다.
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