๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

https://school.programmers.co.kr/learn/courses/30/lessons/42628

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


1. ๋ฌธ์ œ

๊ฐ ๋ช…๋ น์–ด์— ๋”ฐ๋ผ ์ด์ค‘์šฐ์„ ์ˆœ์œ„ํ์˜ ์—ฐ์‚ฐ์ด ์ฒ˜๋ฆฌ๋œ๋‹ค.

I ์ˆซ์ž => ํ์— ์ˆซ์ž ์‚ฝ์ž…

D 1 => ํ์—์„œ ์ตœ๋Œ“๊ฐ’ ์‚ญ์ œ

D -1 => ํ์—์„œ ์ตœ์†Ÿ๊ฐ’ ์‚ญ์ œ

์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋˜, ํ๊ฐ€ ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ [0,0] ์„ returnํ•œ๋‹ค.

 

2. ํ’€์ด

์šฐ์„ ์ˆœ์œ„ํ 2๊ฐœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•˜๋‚˜๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ํ์ธ ์ตœ์†Œํž™,

๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ํ์ธ ์ตœ๋Œ€ํž™

์œผ๋กœ ํ™œ์šฉํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ์€ "์ตœ์†Œํ์™€ ์ตœ๋Œ€ํ์˜ ์›์†Œ๋ฅผ ๋™์ผํ•˜๊ฒŒ ํ•ด์ค˜์•ผ ํ•œ๋‹ค"๋Š” ๊ฒƒ์ด๋‹ค.

๋ฌด์Šจ ๋ง์ด๋ƒ๋ฉด, ์ตœ๋Œ“๊ฐ’ ์‚ญ์ œํ•˜๋ผ๊ณ  ํ•ด์„œ ์ตœ๋Œ€ํž™์—์„œ๋งŒ pollํ•˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

์ตœ๋Œ€ํž™์—์„œ๋„ ์‚ญ์ œํ•ด์ฃผ๊ณ  ์ตœ์†Œํž™์—์„œ๋„ ์‚ญ์ œํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทผ๋ฐ ์ตœ๋Œ€ํž™์—์„œ ์‚ญ์ œํ•˜๋Š”๊ฑด maxPq.poll() ํ•ด์ฃผ๋ฉด ๋์ด๋‹ค. ๊ทธ๋Ÿผ ์ตœ์†Œํž™์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์‚ญ์ œํ•˜๋‚˜?

 

๋ฐ”๋กœ remove ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

pq.remove()๋Š” pq.poll()๊ณผ ์—ญํ• ์ด ๋™์ผํ•˜๋‹ค. ์šฐ์„ ์ˆœ์œ„ํ์˜ ๋งจ ์•ž ์›์†Œ๋ฅผ ์‚ญ์ œํ•ด์ค€๋‹ค๋Š” ๊ณตํ†ต์ ์ด ์žˆ๋‹ค.

๋‘˜์˜ ์ฐจ์ด์ ์€ remove()๋Š” ํ๊ฐ€ ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ Exception์ด ๋ฐœ์ƒํ•˜๊ณ , poll()์€ null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ ํŠน์ด์ ์ด ์žˆ๋‹ค.

pq.remove(์›์†Œ)๋ฅผ ํ•  ๊ฒฝ์šฐ, ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ํ•ด๋‹น ์›์†Œ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค.

๋งŒ์•ฝ ํ์— ํ•ด๋‹น ์›์†Œ๊ฐ€ ์—†์–ด๋„ Exception์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‚ญ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ๋ฟ์ด๋‹ค.

์ด๋Ÿฌํ•œ ๋‹ฌ๋‹ฌํ•œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ์ด ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

 

3. ์ฝ”๋“œ

์—ฐ์‚ฐ์ž๊ฐ€ D์ด๊ณ  ํ๊ฐ€ ๋น„์—ˆ์„ ๊ฒฝ์šฐ์—” ๋ฐ”๋กœ continueํ•ด์คฌ๋‹ค. ๋ฐ‘์„ ๋” ๋ณผ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋”๋ณด๊ธฐ

import java.io.*;
import java.util.*;

class Solution {
    
    public int[] solution(String[] operations) {
        PriorityQueue<Integer> minPq = new PriorityQueue<> (); // ์ตœ์†Œํž™
        PriorityQueue<Integer> maxPq = new PriorityQueue<> ((o1, o2) -> o2-o1);
        StringTokenizer st = null;
        
        for (String item : operations) {
            st = new StringTokenizer(item);
            String oper = st.nextToken();
            int num = Integer.parseInt(st.nextToken());
            
            if ("D".equals(oper) && minPq.isEmpty()) {
                continue;
            }
            
            if ("I".equals(oper)) {
                minPq.offer(num);
                maxPq.offer(num);
                continue;
            }
            
            // ์ตœ์†Œ๊ฐ’ ์‚ญ์ œ
            if (num < 0) {
                maxPq.remove(minPq.poll());
                continue;
            }
            
            // ์ตœ๋Œ“๊ฐ’ ์‚ญ์ œ
            minPq.remove(maxPq.poll());
        }
        
        if (minPq.isEmpty()) {
            return new int[] {0,0};
        }
        
        return new int[] {maxPq.poll(), minPq.poll()};
    }
}

 

4. ์‚ฌ๋‹ด

์šฐ์„ ์ˆœ์œ„ํ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ๋Š” ํ•ญ์ƒ ์žฌ๋ฐŒ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๋‚ด๋ฆผ์ฐจ์ˆœํ•  ๋•Œ ํ•ญ์ƒ ๋žŒ๋‹ค๋กœ (o1, o2) -> o2-o1์„ ํ™œ์šฉํ–ˆ๋Š”๋ฐ

Collections.reverseOrder()๋„ ์žˆ๋‹ค๋Š”๊ฑธ ์žŠ์ง€๋ง์ž !