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
- 문자열
- 보이어무어
- HashSet
- HashMap
- 최소공배수
- 2017 카카오 코드
- pandas
- 조합
- Dynamic Programming
- 튜플
- 규칙찾기
- 프로그래머스
- 반복문
- dfs
- 쿼드압축 후 개수세기
- 어려웠던 문제
- 동적계획법
- 점프와 순간이동
- 알고리즘
- Java
- fragment identifier
- 에라토스테네스의 체
- 순열
- Stack
- python
- 완전 탐색
- 완전탐색
- 영문자 확인
- 메뉴리뉴얼
- 후위 표기법
Archives
- Today
- Total
csmoon1010의 SW 블로그
[200420] 힙 - 이중우선순위큐(level3) 본문
1. 문제이해
- 상황에 맞게 최대값, 최소값을 삭제해야됨 --> 오름차순, 내림차순으로 그 때 그 때 정렬
- I 숫자 : substring을 통해 숫자만 뽑기
2. 전략
- pq : 숫자가 들어가있는 큐
- temp : 임시 큐(pq의 오름차순, 내림차순 모드를 바꾸는 동안 쓰는)
- directionUp : 오름차순, 내림차순 상태를 저장해둔 boolean
3. 참고했던 사항
- priorityqueue에서 Collections.reverseOrder()를 적용 시킨다.
(200419 - 디스크 컨트롤러 참고)
4. 코드
import java.util.*;
class Solution {
public int[] solution(String[] operations) {
int[] answer = new int[2];
boolean directionUp = true; //오름차순
PriorityQueue<Integer> pq = new PriorityQueue<>();
PriorityQueue<Integer> temp;
int a = 0, b = 0;
for(String s : operations){
if((s.substring(0, 1)).equals("I")){ //삽입
int num = Integer.parseInt(s.substring(2));
pq.add(num);
}
else if(s.equals("D 1")){ //최대값
if(directionUp){ //내림차순으로 맞춰주기
temp = pq;
pq = new PriorityQueue<>(Collections.reverseOrder());
pq.addAll(temp);
directionUp = false;
}
if(pq.size() != 0) pq.remove();
}
else{ //최소값
if(!directionUp){ //오름차순으로 맞춰주기
temp = pq;
pq = new PriorityQueue<>();
pq.addAll(temp);
directionUp = true;
}
if(pq.size() != 0) pq.remove();
}
}
int n = pq.size();
while(pq.size() != 0){
if(pq.size() == n) a = pq.poll();
if(pq.size() == 1) b = pq.poll();
else pq.remove();
}
if(a > b){
answer[0] = a;
answer[1] = b;
}
else {
answer[0] = b;
answer[1] = a;
}
return answer;
}
}
5. 다른 방법
- 현재 방법 : 큐는 두개 쓰면서 모드가 바뀔 때마다 계속 정렬 함수 씀 --> 시간이 오래 걸림
- 새로운 방법 : 오름차순 큐, 내림차순 큐를 따로 쓰기!!
- I일 때는 둘다 add
- D일 때 최대값이면 내림차순에서, 최소값이면 오름차순에서 poll한 후 그 값을 다른 큐에서도 remove
- 생각하지 못했던 원인 : pq.remove(값)이 가능한지 몰랐다!!알아두도록 하자!!
'Coding Test > 프로그래머스' 카테고리의 다른 글
[200424] 동적계획법(Dynamic Programming) - N으로 표현(level3) (0) | 2020.04.24 |
---|---|
[200421] 탐욕법(Greedy) - 섬 연결하기(level3) (0) | 2020.04.24 |
[200421] 탐욕법(Greedy) - 구명보트(level2) (0) | 2020.04.24 |
[200419] 힙 - 디스크컨트롤러(level3) (0) | 2020.04.20 |
[200418] 해시 - 베스트앨범(level3) (0) | 2020.04.18 |
Comments