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
- 재귀
- java Collections.sort()
- 자바
- 순열코드
- jquery 속성선택자
- 알고리즘 그래프
- jquery 이벤트 처리
- jquery 필터선택자
- 자바 순열 코드
- 조합 재귀
- inner class
- 순열 재귀
- 자바스크립트 이벤트처리
- 자바 조합 재귀
- 자바스크립트 이벤트중지
- char to str
- jquery dom 계층 선택자
- str to char array
- java 내부 클래스
- 자바 재귀 조합
- 후위표기
- parseInt()
- 서로소
- 재귀함수
- java lambda
- Interface
- 상속
- 알고리즘
- 자바입출력
- Java
Archives
- Today
- Total
유블로그
[프로그래머스] 이중우선순위큐 본문
프로그래머스 level3 이중우선순위큐
소요시간 : 15분
무식하게 문제가 하라는대로만 푼 거 ㅎ
최소값 제거할 때는 마지막 값 빼고 리스트에 다 넣어서 다시 pq 에 넣었다 ㅋㅋㅋㅋㅋㅋ
마지막에 답 return 할 때는 최댓값은 peek으로 하고 최소값은 전부 다 poll 해서 마지막값했다
최댓값 peek 한 이유는 pq 사이즈가 1이어서 최대==최소 인 경우가 있을까봐..
그런데 풀고나서 다른 사람들 풀이보이 pq 를 두 개 써서 하나는 최대힙, 다른 하나는 최소힙으로 만들어서 했던데 그게 훨씬 효율적이고 깔끔하고 좋을듯 ㅎㅎ
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
class Solution {
public int[] solution(String[] operations) {
PriorityQueue<Integer> pq = new PriorityQueue<>((o1, o2)->(o2-o1));
for (int i = 0; i < operations.length; i++) {
switch(operations[i].charAt(0)) {
case 'I':
pq.offer(Integer.parseInt(operations[i].substring(2)));
break;
case 'D':
if(operations[i].charAt(2)-'0' == 1) {
pq.poll();
}
else {
int size = pq.size();
List<Integer> list = new ArrayList<>();
for (int q = 0; q < size-1; q++) {
list.add(pq.poll());
}
pq.poll();
for (int j = 0; j < list.size(); j++) {
pq.add(list.get(j));
}
}
break;
}
}
if(pq.size() == 0) return new int[] {0,0};
int[] answer = new int[2];
answer[0] = pq.peek();
int last = 0;
while(!pq.isEmpty()) {
last = pq.poll();
}
answer[1] = last;
return answer;
}
}
'알고리즘' 카테고리의 다른 글
[프로그래머스] 소수찾기 (0) | 2021.01.04 |
---|---|
[프로그래머스] 모의고사 (0) | 2021.01.03 |
[프로그래머스] 디스크컨트롤러 (0) | 2021.01.02 |
[프로그래머스] K번째수 (0) | 2020.12.26 |
[프로그래머스] 프린터 (0) | 2020.12.23 |