Notice
Recent Posts
Recent Comments
Link
복's
[ 백준 - 11286 ] 절대값 힙 본문
728x90
https://www.acmicpc.net/problem/11286
11286번: 절댓값 힙
첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
힙을 사용하는 문제였는데 힙의 구현을 유도하는 문제였나 싶다.
힙은 사실 아직까지 구현 해본적 없어서 해보긴 해야 하는데....
[ 📌 풀이 ]
정수가 1개씩 주어지는데 1개씩 주어질 때마다 분기 요구사항에 맞춰서 처리하면 된다.
- 0일 때
- heap이 비어있다면 0을 출력한다.
- heap이 비어있지 않다면 요소 하나 출력한다.
- 0이 아닐 때 힙에 주어진 정수를 넣는다.
다만 정수를 힙에 삽입할 때 절대 값으로 넣어야 한다.
그 외 특별한 조건은 없다.
[ 📌 코드 - Python ]
"""
# Author : Lee In Bok
# Date : 2023.11.05(Sun)
# Spend Time: 34m 23s
# Runtime : 124 ms
# Memory : 39824 KB
# Algoritm : Heap
"""
import sys
from heapq import heappop, heappush
input = sys.stdin.readline
class Solution():
def sol(self):
heap = []
for _ in range(N):
num = int(input())
if num != 0:
heappush(heap, (abs(num), num))
else:
if heap:
print(heappop(heap)[1])
else:
print(0)
s = Solution()
N = int(input())
s.sol()
[ 📌 코드 - Java ]
/**
* Author : Lee In Bok
* Date : 2023.11.05(Sat)
* Spend Time: 34m 23s
* Runtime : 316 ms
* Memory : 25280 KB
* Algoritm : Heap
*/
package BaekJoon.QueueAndDeque.Q11286;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
public class Q11286_AbsoluteHeap {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Queue<Pair> queue = new PriorityQueue<>(new Comparator<Pair>() {
@Override
public int compare(Pair p1, Pair p2){
if(p1.abs == p2.abs){
return p1.org - p2.org;
}
return p1.abs - p2.abs;
}
});
int N = Integer.parseInt(br.readLine());
for(int i = 0; i < N; i++){
int num = Integer.parseInt(br.readLine());
if(num == 0){
if(!queue.isEmpty()){
sb.append(queue.poll().org).append('\n');
} else {
sb.append(0).append('\n');
}
} else {
queue.add(new Pair(Math.abs(num), num));
}
}
System.out.println(sb);
}
}
class Pair{
int abs;
int org;
Pair(int abs, int org){
this.abs = abs;
this.org = org;
}
}
[ 📌 결과 - Python & Java ]
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[ 백준 - 1377 ] 버블 소트 (2) | 2023.11.24 |
---|---|
[ 백준 - 1676 ] 팩토리얼 0의 개수 (0) | 2023.11.15 |
[ 백준 - 2559 ] 수열 (0) | 2023.11.03 |
[ 백준 - 12891 ] DNA 비밀번호 (2) | 2023.10.29 |
[ 백준 - 1253 ] 좋다 (Python) (0) | 2023.09.25 |