728x90
문제
https://www.acmicpc.net/problem/11279
최대 힙(Max Heap) 을 구현하여 주어진 연산을 처리하는 문제입니다. 최대 힙은 가장 큰 값을 빠르게 꺼낼 수 있는 자료구조로, 다음과 같은 연산을 지원합니다.
접근 방법
- 우선순위 큐(Priority Queue) 활용:
- 자바의 PriorityQueue는 기본적으로 최소 힙으로 작동합니다. 따라서, 최대 힙으로 사용하려면 역순 정렬을 사용하여 힙의 우선순위를 반대로 설정합니다.
- 연산 처리:
- x > 0일 경우: 최대 힙에 x를 추가합니다.
- x == 0일 경우: 최대 힙에서 최댓값을 꺼내어 출력합니다. 힙이 비어있으면 0을 출력합니다.
풀이 과정
- 최대 힙 구현:
- PriorityQueue를 역순으로 정렬하여 최대 힙을 구현합니다.
- 입력 처리 및 연산 수행:
- 입력 값을 받아들이고, 각 값에 대해 조건에 맞는 연산을 수행합니다.
- 결과 출력:
- 결과를 StringBuilder에 모아두고 한 번에 출력하여 성능을 최적화합니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
// 최대 힙을 위한 PriorityQueue 선언 (역순 정렬)
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
for (int i = 0; i < N; i++) {
int x = Integer.parseInt(br.readLine());
if (x > 0) {
// x가 자연수일 경우, 최대 힙에 추가
maxHeap.offer(x);
} else {
// x가 0일 경우, 최대 힙에서 최댓값 출력
if (maxHeap.isEmpty()) {
sb.append(0).append('\n');
} else {
sb.append(maxHeap.poll()).append('\n');
}
}
}
// 최종 결과 출력
System.out.print(sb);
}
}
메모리:26492kb 시간:292ms
728x90
'IT 개발 관련 > [Algorithm]' 카테고리의 다른 글
[백준] 1436번: 영화감독 숌 (0) | 2024.09.01 |
---|---|
[백준] 24262번: 알고리즘 수업 - 알고리즘의 수행 시간 1 (0) | 2024.08.31 |
[백준] 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 - Java (0) | 2024.08.30 |
[백준] 1316번: 그룹 단어 체커 - Java (0) | 2024.08.29 |
[백준] 10988번: 팰린드롬인지 확인하기 - Java (1) | 2024.08.28 |