
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 학생 수 N 입력 받기
int N = scanner.nextInt();
// 학생들의 성적을 저장할 리스트
ArrayList<Double> scores = new ArrayList<Double>();
// N번 반복하며 성적 입력 받기
for (int i = 0; i < N; i++) {
double score = scanner.nextDouble();
scores.add(score);
}
// 성적 리스트를 오름차순으로 정렬
Collections.sort(scores);
// 하위 7명의 성적 출력
for (int i = 0; i < 7; i++) {
System.out.printf("%.3f\n", scores.get(i));
}
scanner.close();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int repetition = Integer.parseInt(br.readLine());
PriorityQueue<Double> minHeap = new PriorityQueue<>(Collections.reverseOrder());
for (int i = 0; i < repetition; i++) {
double score = Double.parseDouble(br.readLine());
//힙에 성적 추가
minHeap.add(score);
// 힙의 크기가 8이 되면 가장 높은 성적을 가진 학생 제거
if (minHeap.size() > 7) {
minHeap.poll();
}
}
// 결과 출력을 위해 힙을 배열로 변환
Double[] result = minHeap.toArray(new Double[0]);
// 배열을 오름차순으로 정렬
Arrays.sort(result);
// 하위 7명의 성적 출력
for (double score : result) {
System.out.printf("%.3f\n", score);
}
br.close();
}
}
모든 학생의 성적을 저장하는 대신에, 최소 힙(min heap) 자료구조를 사용하여 하위 7명의 성적만을 유지할 수 있다.
PriorityQueue를 최소 힙으로 활용할 수 있다.
이 방법을 사용하면, 언제든지 힙의 크기를 7로 유지하면서, 낮은 성적부터 차례대로 제거할 수 있으므로, 메모리 사용량을 크게 줄일 수 있다.