Skip to content

Commit f5089d7

Browse files
committed
[level 3] Title: 이중우선순위큐, Time: 155.66 ms, Memory: 55.7 MB -BaekjoonHub
1 parent 2c6c027 commit f5089d7

File tree

2 files changed

+127
-0
lines changed

2 files changed

+127
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# [level 3] 이중우선순위큐 - 42628
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/42628)
4+
5+
### 성능 요약
6+
7+
메모리: 55.7 MB, 시간: 155.66 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 힙(Heap)
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 09월 19일 17:34:43
20+
21+
### 문제 설명
22+
23+
<p>이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.</p>
24+
<table class="table">
25+
<thead><tr>
26+
<th>명령어</th>
27+
<th>수신 탑(높이)</th>
28+
</tr>
29+
</thead>
30+
<tbody><tr>
31+
<td>I 숫자</td>
32+
<td>큐에 주어진 숫자를 삽입합니다.</td>
33+
</tr>
34+
<tr>
35+
<td>D 1</td>
36+
<td>큐에서 최댓값을 삭제합니다.</td>
37+
</tr>
38+
<tr>
39+
<td>D -1</td>
40+
<td>큐에서 최솟값을 삭제합니다.</td>
41+
</tr>
42+
</tbody>
43+
</table>
44+
<p>이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.</p>
45+
46+
<h5>제한사항</h5>
47+
48+
<ul>
49+
<li>operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다.</li>
50+
<li>operations의 원소는 큐가 수행할 연산을 나타냅니다.
51+
52+
<ul>
53+
<li>원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.</li>
54+
</ul></li>
55+
<li>빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다.</li>
56+
</ul>
57+
58+
<h5>입출력 예</h5>
59+
<table class="table">
60+
<thead><tr>
61+
<th>operations</th>
62+
<th>return</th>
63+
</tr>
64+
</thead>
65+
<tbody><tr>
66+
<td>["I 16", "I -5643", "D -1", "D 1", "D 1", "I 123", "D -1"]</td>
67+
<td>[0,0]</td>
68+
</tr>
69+
<tr>
70+
<td>["I -45", "I 653", "D 1", "I -642", "I 45", "I 97", "D 1", "D -1", "I 333"]</td>
71+
<td>[333, -45]</td>
72+
</tr>
73+
</tbody>
74+
</table>
75+
<h5>입출력 예 설명</h5>
76+
77+
<p>입출력 예 #1</p>
78+
79+
<ul>
80+
<li>16과 -5643을 삽입합니다.</li>
81+
<li>최솟값을 삭제합니다. -5643이 삭제되고 16이 남아있습니다.</li>
82+
<li>최댓값을 삭제합니다. 16이 삭제되고 이중 우선순위 큐는 비어있습니다.</li>
83+
<li>우선순위 큐가 비어있으므로 최댓값 삭제 연산이 무시됩니다.</li>
84+
<li>123을 삽입합니다.</li>
85+
<li>최솟값을 삭제합니다. 123이 삭제되고 이중 우선순위 큐는 비어있습니다.</li>
86+
</ul>
87+
88+
<p>따라서 [0, 0]을 반환합니다.</p>
89+
90+
<p>입출력 예 #2</p>
91+
92+
<ul>
93+
<li>-45와 653을 삽입후 최댓값(653)을 삭제합니다. -45가 남아있습니다.</li>
94+
<li>-642, 45, 97을 삽입 후 최댓값(97), 최솟값(-642)을 삭제합니다. -45와 45가 남아있습니다.</li>
95+
<li>333을 삽입합니다.</li>
96+
</ul>
97+
98+
<p>이중 우선순위 큐에 -45, 45, 333이 남아있으므로, [333, -45]를 반환합니다.</p>
99+
100+
<hr>
101+
102+
<p>※ 공지 - 2024년 7월 22일 테스트케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.</p>
103+
104+
105+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
function solution(operations) {
2+
const heap = [];
3+
const op = operations.map(operation => operation.split(' '));
4+
// 입력된 명령어를 공백(' ')을 기준으로 분할한다.
5+
// 따라서 배열[0] = 명령어, 배열[1] = 숫자로 접근할 수 있다.
6+
7+
op.forEach(num => {
8+
if(num[0] === 'I') { // 명령어가 I라면 데이터 삽입
9+
heap.push(Number(num[1]))
10+
}
11+
else { // 그 외의 경우, 즉 명령어가 D인 경우
12+
const findValue = (num[1] === '1' ? Math.max : Math.min)(...heap);
13+
// 숫자가 1이라면 max값을, -1이라면 min값을 적용해서
14+
const delIdx = heap.indexOf(findValue);
15+
// 찾고자 하는 값의 인덱스를 찾아서
16+
heap.splice(delIdx, 1);
17+
// (이름만 heap인) 배열에서 해당 인덱스의 원소를 제거
18+
}
19+
})
20+
21+
return heap.length ? [Math.max(...heap), Math.min(...heap)] : [0, 0];
22+
}

0 commit comments

Comments
 (0)