๐ค 1. ๋ฌธ์ ์ค๋ช
๋ฌธ์ ์ค๋ช
์ด์ค ์ฐ์ ์์ ํ๋ ๋ค์ ์ฐ์ฐ์ ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋งํฉ๋๋ค.
์ด์ค ์ฐ์ ์์ ํ๊ฐ ํ ์ฐ์ฐ operations๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ชจ๋ ์ฐ์ฐ์ ์ฒ๋ฆฌํ ํ ํ๊ฐ ๋น์ด์์ผ๋ฉด [0,0] ๋น์ด์์ง ์์ผ๋ฉด [์ต๋๊ฐ, ์ต์๊ฐ]์ return ํ๋๋ก solution ํจ์๋ฅผ ๊ตฌํํด์ฃผ์ธ์.
์ ํ์ฌํญ
- operations๋ ๊ธธ์ด๊ฐ 1 ์ด์ 1,000,000 ์ดํ์ธ ๋ฌธ์์ด ๋ฐฐ์ด์ ๋๋ค.
- operations์ ์์๋ ํ๊ฐ ์ํํ ์ฐ์ฐ์ ๋ํ๋ ๋๋ค.
- ์์๋ “๋ช ๋ น์ด ๋ฐ์ดํฐ” ํ์์ผ๋ก ์ฃผ์ด์ง๋๋ค.
- - ์ต๋๊ฐ/์ต์๊ฐ์ ์ญ์ ํ๋ ์ฐ์ฐ์์ ์ต๋๊ฐ/์ต์๊ฐ์ด ๋ ์ด์์ธ ๊ฒฝ์ฐ, ํ๋๋ง ์ญ์ ํฉ๋๋ค.
- ๋น ํ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ผ๋ ์ฐ์ฐ์ด ์ฃผ์ด์ง ๊ฒฝ์ฐ, ํด๋น ์ฐ์ฐ์ ๋ฌด์ํฉ๋๋ค.
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- 16๊ณผ -5643์ ์ฝ์ ํฉ๋๋ค.
- ์ต์๊ฐ์ ์ญ์ ํฉ๋๋ค. -5643์ด ์ญ์ ๋๊ณ 16์ด ๋จ์์์ต๋๋ค.
- ์ต๋๊ฐ์ ์ญ์ ํฉ๋๋ค. 16์ด ์ญ์ ๋๊ณ ์ด์ค ์ฐ์ ์์ ํ๋ ๋น์ด์์ต๋๋ค.
- ์ฐ์ ์์ ํ๊ฐ ๋น์ด์์ผ๋ฏ๋ก ์ต๋๊ฐ ์ญ์ ์ฐ์ฐ์ด ๋ฌด์๋ฉ๋๋ค.
- 123์ ์ฝ์ ํฉ๋๋ค.
- ์ต์๊ฐ์ ์ญ์ ํฉ๋๋ค. 123์ด ์ญ์ ๋๊ณ ์ด์ค ์ฐ์ ์์ ํ๋ ๋น์ด์์ต๋๋ค.
๋ฐ๋ผ์ [0, 0]์ ๋ฐํํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2
- -45์ 653์ ์ฝ์ ํ ์ต๋๊ฐ(653)์ ์ญ์ ํฉ๋๋ค. -45๊ฐ ๋จ์์์ต๋๋ค.
- -642, 45, 97์ ์ฝ์ ํ ์ต๋๊ฐ(97), ์ต์๊ฐ(-642)์ ์ญ์ ํฉ๋๋ค. -45์ 45๊ฐ ๋จ์์์ต๋๋ค.
- 333์ ์ฝ์ ํฉ๋๋ค.
์ด์ค ์ฐ์ ์์ ํ์ -45, 45, 333์ด ๋จ์์์ผ๋ฏ๋ก, [333, -45]๋ฅผ ๋ฐํํฉ๋๋ค.
๐ก 2. ์ ๊ทผ๋ฐฉ์
Queue ๋ฅผ ์ด์ค์ผ๋ก ์ ์ธ
๋ฌธ์ ์ด๋ฆ ๊ทธ๋๋ก max๊ฐ์ ๊บผ๋ด์ฌ ํ์ min๊ฐ์ ๊บผ๋ด์ฌ ํ๋ฅผ ๋ ๊ฐ ์ ์ธ
maxํ๋ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ, minํ๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
operations์ ์์๋ฅผ ์ํํ๋ฉด์ " " ๊ธฐ์ค์ผ๋ก `๋ช ๋ น์ด`์ `๊ฐ`์ผ๋ก ๋ถ๋ฆฌํ๋ค.
์ ์ถ๋ ฅ ์
["I 16", "I -5643", "D -1", "D 1", "D 1", "I 123", "D -1"]
`I 16` : ์ซ์ `16`์ ์ฝ์ (Insert 16)
`I -5643` : ์ซ์ `-5643`์ ์ฝ์ (Insert -5643)
`D -1` : ์ต์๊ฐ ์ญ์ (Delete min)
`D 1`: ์ต๋๊ฐ ์ญ์ (Delete max)
`D 1`: ์ต๋๊ฐ ์ญ์ (Delete max)
`I 123` : ์ซ์ `123`์ ์ฝ์ (Insert 123)
`D -1` : ์ต์๊ฐ ์ญ์ (Delete min)
๊ฐ operations[i] ๊ฐ์ split(" ")์ผ๋ก ๋๋์ด strs ๋ฐฐ์ด์ ์ ์ฅํ๋ฉด
operations[0]์ธ "I 16" → strs = ["I", "16"]
operations[1]์ธ "I -5643" → strs = ["I", "-5643"]
์ด๋ฐ ์์ผ๋ก `strs[0]์ ๋ช ๋ น์ด`, `strs[1]์ ๊ฐ`์ผ๋ก ๋๋์ด ๋ด๊ธฐ๊ฒ ๋๋ค.
strs[0]์ด "I" ์ด๋ฉด strs[1] ๊ฐ์ ๋ ํ์ ๋ด์์ฃผ๊ณ ,
strs[0]์ด "D" && strs[1]์ด 1์ด๋ฉด maxํ์์ ์ต๋๊ฐ์ ๋นผ๋ด๊ณ
strs[0]์ด "D" && strs[1]์ด -1์ด๋ฉด minํ์์ ์ต์๊ฐ์ ๋นผ๋ธ๋ค.
๋ชจ๋ ๊ณผ์ ์ด ๋๋๊ณ ๊ฐ ํ๊ฐ ๋น์์ผ๋ฉด 0์ ๋ฐํํ๊ณ , ์๋๋ผ๋ฉด ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๋ฐํํ๋ค.
์๊ฐ๋ณด๋ค ์ฌ์ด ์ฝ๋์ธ๋ฐ ์ด๊ฒ ๋์ด๋ 3์ด๋ ๋๋ค๊ณ ?
๊ทธ๋ฆฌ๊ณ ์ฒ์์ operations์์ I๊ฐ ๋๋ฌธ์ i์ธ์ง ์๋ฌธ์ l์ธ์ง ์ญ์ฌ๋์ ์์ ์๋ |์ธ์ง ํท๊ฐ๋ ธ์ผ๋ insert์ด๋๊น ๋๋ฌธ์ I๋ก ๊ฐ์ ํ๊ณ ์ฝ๋๋ฅผ ์ผ๋๋ ํด๊ฒฐ์ด ๋๋ค. ใ ใ ใ
โญ 3. ์ฝ๋
์ญ์ ใ ใ ใ ใ ใ ใ ใ ....
์ ๋๋ ์ฒซ๋ฒ์งธ ์๋์์๋ ๋งจ๋ ์ด๋ค ์ผ์ด์ค๋ ๋ง๊ณ ์ด๋ค ์ผ์ด์ค๋ ์๋ง๋ ๊ฒ์ธ๊ฐ..
import java.util.*;
class Solution {
public int[] solution(String[] operations) {
PriorityQueue<Integer> maxq = new PriorityQueue<>((o1, o2) -> (o2 - o1));
PriorityQueue<Integer> minq = new PriorityQueue<>();
for(int i = 0; i < operations.length; i++ ) {
String[] strs = operations[i].split(" ");
int num = Integer.parseInt(strs[1]);
if(strs[0].equals("I")) {
maxq.add(num);
minq.add(num);
} else if(strs[0].equals("D") && num==1) {
minq.remove(maxq.poll());
} else if(strs[0].equals("D") && num==-1) {
maxq.remove(minq.poll());
}
}
int min = minq.isEmpty()? 0 : minq.poll(),
max = maxq.isEmpty()? 0 : maxq.poll();
return new int[] {max, min};
}
}
๊น๋!
์ฒ์์ ํ ์คํธ ์ผ์ด์ค ํ ๊ฐ๋ง ํต๊ณผ๋๋ ์ด์ ๋ return ํ ๋ min์ด๋ max ์๋ฆฌ ๋ฐ๊ฟ์จ์ ๊ทธ๋ฐ๊ฑฐ์๋ค. ํ ์คํธ ์ผ์ด์ค1์ ๊ฐ์ด [0, 0] ์ด๋ผ ํต๊ณผ๋๊ฑฐ๊ณ , ์ ์ฝ๋์ฒ๋ผ {max, min}์ผ๋ก ๋ฐ๊ฟ์ฃผ๋๊น ๋ฐ๋ก ์ ๋ต์ฒ๋ฆฌ ๋๋ค. int num ์ ๋ณ๋๋ก ์ ์ธํด ์ฃผ๊ธฐ ์ ์๋ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ์ง์ ๋ถํ๋๋ค Integer.parseInt(strs[1])๋ก ๋ฏธ๋ฆฌ ๋ฌธ์์ด์ ํ๋ณํ ํด์ ๋ณ์์ ๋ด์ ์ฃผ๋๊น ์ฝ๋๊ฐ ํจ์ฌ ๊น๋ํด์ก๋ค. ์ผํญ์ฐ์ฐ์ ์จ ์ค๊ฒ๋ ๊น๋~
๐ ํ๋ก๊ทธ๋๋จธ์ค์์ ์ข์์ ๋ง์ด ๋ฐ์ ์ฝ๋
import java.util.Collections;
import java.util.PriorityQueue;
class Solution {
public int[] solution(String[] arguments) {
int[] answer = {0,0};
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
PriorityQueue<Integer> reverse_pq = new PriorityQueue<Integer>(Collections.reverseOrder());
for(int i=0; i<arguments.length; i++) {
String temp[] = arguments[i].split(" ");
switch(temp[0]) {
case "I" :
pq.add(Integer.parseInt(temp[1]));
reverse_pq.add(Integer.parseInt(temp[1]));
break;
case "D" :
if(pq.size() > 0) {
if(Integer.parseInt(temp[1]) == 1) {
// ์ต๋๊ฐ ์ญ์
int max = reverse_pq.poll();
pq.remove(max);
} else {
// ์ต์๊ฐ ์ญ์
int min = pq.poll();
reverse_pq.remove(min);
}
}
break;
}
}
if(pq.size() >= 2) {
answer[0] = reverse_pq.poll();
answer[1] = pq.poll();
}
System.out.println(answer[0] + ":" + answer[1]);
return answer;
}
}
๐๐ป 4. ๊ฐ์ ์ ํ ๋ฌธ์ (์ฐ์ ์์ํ)