📖 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 풀이 방식
• Deque / LinkedList 활용
1. 명령어가 I인 경우, 리스트에 주어진 숫자를 삽입하고 오름차순 정렬시킨다.
2. 명령어가 D인 경우, 큐가 비어있다면 패스한다.
큐가 비어있지 않고, 입력받은 수가 1인 경우 맨 뒤쪽 값(=최댓값)을 제거한다.
큐가 비어있지 않고, 입력받은수가 -1인 경우 맨 앞쪽 값(=최솟값)을 제거한다.
3. 마지막에 큐가 비어있다면 (0, 0)을 출력한다.
큐가 비어있지 않다면, 큐에서 ( 맨 뒤쪽 값(=최댓값), 맨 앞쪽 값(=최솟값))을 출력한다.
🔺 코드
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
|
import java.util.*;
class Solution {
public int[] solution(String[] operations) {
LinkedList<Integer> pq = new LinkedList<>();
for(int i = 0 ; i < operations.length ; i++) {
String[] s = operations[i].split(" ");
String cmd = s[0];
int num = Integer.parseInt(s[1]);
if(cmd.equals("I")) {
pq.add(num);
Collections.sort(pq); // 오름차순 정렬
}
else if(cmd.equals("D")) {
if(pq.isEmpty()) continue; // 빈 큐에서 데이터를 삭제하라는 연산인 경우, 무시
if(num == 1) pq.removeLast();
else pq.removeFirst();
}
}
// 출력하기
int[] answer = new int[2];
answer = pq.isEmpty() ? answer : new int[] {pq.pollLast(), pq.pollFirst()};
return answer;
}
}
|
cs |
➕ 다른 풀이 방식
대부분 최소 힙과 최대 힙을 각각 저장해 PriorityQueue를 2개 만드셔서 활용하셨다.
최소 힙은 오름차순 정렬, 최대 힙은 내림차순 정렬로 하게 하고.
PriorityQueue의 remove(Obejct o) 메소드를 활용해 중간에 있는 객체를 제거 가능하다.
maxQ.remove(minQ.poll());
[프로그래머스][Java] 이중우선순위큐
문제 설명 이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다. 명령어수신 탑(높이) I 숫자 큐에 주어진 숫자를 삽입합니다. D 1 큐에서 최댓값을 삭제합니다. D -1 큐에서 최솟값을
jgeun97.tistory.com
🧐 새로 알게 된 내용
- PriorityQueue의 remove(Object o) 메소드는
객체가 존재한다면 삭제하고 true를 반환하지만, 객체가 존재하지 않는다면 false를 출력한다.
Java Tutorial - Java PriorityQueue.remove(Object o)
Java PriorityQueue.remove(Object o) Syntax PriorityQueue.remove(Object o) has the following syntax. public boolean remove(Object o) Example In the following code shows how to use PriorityQueue.remove(Object o) method. // w ww.j a v a2 s.c o m import java.u
www.java2s.com
PriorityQueue remove() Method in Java - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
- Deque, LinkedList , ArrayDeque
Deque, LinkedList 와 ArrayDeque
이번 시간에는 Deque 인터페이스를 알아보고 이의 구현체인 LinkedList와 ArrayDeque를 알아보고 비교할 것이다. 1. Deque란? 원소의 추가와 삭제를 둘 다 끝부분에서 지원하는 선형 collection. Deque라는 이
tech-monster.tistory.com
- remove() 메소드 차이
: [PriorityQueue] boolean remove(Object o) / [ArrayList] E remove(int idx)
[자바] ArrayList와 Queue의 remove() 함수에 대해
자바에서 ArrayList, Queue, PriorityQueue는 꽤나 닮은 점이 많습니다. 그 중 하나는 모두 remove() 함수를 가지고 있다는 것입니다. 좀 더 정확히 말하면 아래의 함수를 가지고 있습니다. boolean remove(Object o
darkstart.tistory.com
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 2] 미로 탈출 (JAVA) (0) | 2024.01.24 |
---|---|
[프로그래머스/Lv. 2] 가장 큰 정사각형 찾기 (JAVA) (0) | 2024.01.19 |
[프로그래머스/Lv. 3] 최고의 집합(JAVA) (0) | 2024.01.17 |
[프로그래머스/Lv. 2] 땅따먹기 (JAVA) (0) | 2024.01.16 |
[프로그래머스/Level2] 시소 짝꿍 (JAVA) (0) | 2024.01.15 |