Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- SSAFY
- 삼성 청년 SW 아카데미
- 서버 호스팅
- 플로이드 워셜
- 호스팅이란?
- 세마포어와 뮤텍스의 차이
- 호스팅
- Synchronization
- 프록시서버
- 다익스트라
- Proxy Server
- 세마포어
- 플로이드 와샬
- 프록시
- 세마포어와 뮤텍스
- floyd-warshall
- 세마포어란?
- 싸피 면접 후기
- 뮤텍스
- Dijkstra Algorithm
- 동기화
- 최단 경로
- 싸피 합격
- 뮤텍스란?
- 웹 호스팅
- 다익스트라 알고리즘
- 클라우드 서버
- 싸피
- Proxy
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[백준][BOJ-7662][자바] 이중 우선순위 큐 본문
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
StringTokenizer st;
for(int i=0; i<T; i++) {
Map<Integer, Integer> map = new HashMap<>();
PriorityQueue<Integer> min = new PriorityQueue<>();
PriorityQueue<Integer> max = new PriorityQueue<>(Collections.reverseOrder());
int Q = Integer.parseInt(br.readLine());
for(int j=0; j<Q; j++) {
st = new StringTokenizer(br.readLine());
String command = st.nextToken();
Integer number = Integer.parseInt(st.nextToken());
switch(command){
case "I":
map.put(number, map.getOrDefault(number, 0) + 1);
min.offer(number);
max.offer(number);
break;
case "D":
//값이 비었는데 삭제 할려고 할때
if(map.size() ==0) continue;
PriorityQueue<Integer> que = number == 1 ? max : min;
removeMap(que, map);
}
}
if(map.size() == 0 ) sb.append("EMPTY\n");
else {
int n = removeMap(max, map);
sb.append(n+" "+ (map.size() > 0 ? removeMap(min, map) : n) +"\n");
}
}
System.out.println(sb.toString());
}
static int removeMap(PriorityQueue<Integer> que, Map<Integer, Integer> map) {
int num;
while (true) {
num = que.poll();
int cnt = map.getOrDefault(num, 0);
if (cnt == 0)
continue;
if (cnt == 1)
map.remove(num);
else
map.put(num, cnt - 1);
break;
}
return num;
}
}
정리
- 문제의 취지에 맞게 최대 우선순위와 최소 우선순위를 선언해준다.
- Map을 통해 숫자와 해당 숫자의 갯수를 저장한다. insert할 때, map.getOrDefefault를 통해 없다면 0을 반환시켜 +1한 값을 put해주었다.
- delete는 queue에서 poll하며 값을 꺼내고 해당 값이 map에 해당 값이 존재하지 않는다면 반복해서 poll을 진행한다. 만약 존재한다면 map의 value를 하나 감소시킨 값을 다시 put하고 만약 1이라면 map에서 삭제하였다.
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
[백준][BOJ-1991][자바] 트리 순회 (0) | 2021.04.19 |
---|---|
[백준][BOJ-2075][자바] N번째 큰 수 (0) | 2021.04.18 |
[백준][BOJ-1766][자바] 문제집 (0) | 2021.04.10 |
[백준][BOJ-11403][자바] 경로 찾기 (0) | 2021.04.08 |
[백준][BOJ-14891][자바] 톱니바퀴 (0) | 2021.04.08 |
Comments