08
27

https://school.programmers.co.kr/learn/challenges?tab=algorithm_practice_kit

 

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

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

programmers.co.kr

ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ 

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        PriorityQueue<Integer> pq = new PriorityQueue();
        for(int i: scoville){
            pq.add(i);
        } // ๊ธฐ๋ณธ์ด min heap
        int s = 0;
        while(s<K){
            if(pq.isEmpty()){
                answer = -1;
                break;
            }
            int easy = pq.poll();
            int eeasy = pq.poll();
            s = easy + (2*eeasy);
            answer++;
        }
        
        
        return answer;
    }
}

์ฒ˜์Œ์— ๋ฌธ์ œ์ดํ•ด๋ฅผ ์™„์ „ํžˆ ์ž˜๋ชปํ–ˆ๋‹ค. ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ์ง€์ˆ˜๊ฐ€ K์ด์ƒ์ด ๋˜์–ด์•ผํ•œ๋‹ค.

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        PriorityQueue<Integer> pq = new PriorityQueue();
        for(int i: scoville){
            pq.add(i);
        } // ๊ธฐ๋ณธ์ด min heap
        while(pq.peek()<K){
            if(pq.isEmpty()){
                answer = -1;
                break;
            }
            if(pq.size()>=2){
                int easy = pq.poll();
                int eeasy = pq.poll();
                pq.add(easy + (2*eeasy)); // ์ƒˆ ์Œ์‹ ๋งŒ๋“ค์–ด์„œ ์ถ”๊ฐ€
                answer++;
            }
        }
        
        return answer;
    }
}

์ด๊ฒŒ ์ˆ˜์ •ํ•œ ์ฝ”๋“œ๋‹ค. ์‹œ๊ฐ„์ดˆ๊ณผ๋‚˜๋Š” ์—„์ฒญ ํฐ ์ผ€์ด์Šค๋ฅผ ์ œ์™ธํ•˜๊ณ ์„œ ๋‹ค ํ†ต๊ณผ๋œ๋‹ค...

์กฐ๊ธˆ๋งŒ ์ƒ๊ฐํ•ด๋ณด๋ฉด ํ•ด๊ฒฐ๋˜๋Š” ๋ถ€๋ถ„์ด์—ˆ๋‹ค. K ์ด์ƒ์œผ๋กœ ์Œ์‹์„ ๋งŒ๋“ค๋ฉด ๋˜๋‹ˆ๊นŒ minheap์„ ๋ฝ‘์•˜์„ ๋•Œ K์ด์ƒ์ธ ๊ฒฝ์šฐ break๋ฅผ ์ค˜๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        PriorityQueue<Integer> pq = new PriorityQueue();
        for(int i: scoville){
            pq.add(i);
        } // ๊ธฐ๋ณธ์ด min heap
        while(pq.peek()<K){
            if(pq.size()>=2){
                int easy = pq.poll();
                int eeasy = pq.poll();
                pq.add(easy + (2*eeasy)); // ์ƒˆ ์Œ์‹ ๋งŒ๋“ค์–ด์„œ ์ถ”๊ฐ€
                answer++;
            }else{
                answer = -1;
                break;
            }
            if(pq.peek() >= K) break;
        }
        
        return answer;
    }
}

pq ์‚ฌ์ด์ฆˆ๋กœ break ์กฐ๊ฑด๋„ ๋ฐ”๊ฟ”์„œ ๋„ฃ์–ด๋ดค๋‹ค.


# ์ถ”๊ฐ€ ๊ณต๋ถ€

`PriorityQueue` ํ™œ์šฉํ•˜๊ธฐ

๊ธฐ๋ณธ์ด minheap์ด๋‹ค ๊ทธ๋ž˜์„œ reverseOrderํ•ด๋ฒ„๋ฆฌ๋ฉด maxheap์ด ๋œ๋‹ค.

PriorityQueue<Integer> maxHeap = new PriorityQueue(Collections.reverseOrder());
PriorityQueue<Integer> maxHeap = new PriorityQueue((o1, o2)-> {return o2-o1;});

์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฅธ๊ฑธ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋ ‡๊ฒŒ๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

PriorityQueue<Student> pq = new PriorityQueue<>((s1, s2) -> {
    if (s1.grade == s2.grade) {
        return s1.name.compareTo(s2.name);
    }
    return s2.grade - s1.grade;
});

๊ทธ๋ฆฌ๋””ํ•œ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์ด๋ ‡๊ฒŒ ํ•˜๊ณค ํ–ˆ๋‹ค.

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•
COMMENT