๐Ÿ“– Algorithm/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

2022.05.17 ใ€ŒLv.2 ํ”„๋ฆฐํ„ฐใ€

GroovyArea 2022. 5. 17. 14:58

๋ฌธ์ œ ์„ค๋ช…

์ผ๋ฐ˜์ ์ธ ํ”„๋ฆฐํ„ฐ๋Š” ์ธ์‡„ ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•œ ๋ฌธ์„œ๊ฐ€ ๋‚˜์ค‘์— ์ธ์‡„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๋ฅผ ๋จผ์ € ์ธ์‡„ํ•˜๋Š” ํ”„๋ฆฐํ„ฐ๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒˆ๋กญ๊ฒŒ ๊ฐœ๋ฐœํ•œ ํ”„๋ฆฐํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ธ์‡„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

1. ์ธ์‡„ ๋Œ€๊ธฐ๋ชฉ๋ก์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์„œ(J)๋ฅผ ๋Œ€๊ธฐ๋ชฉ๋ก์—์„œ ๊บผ๋ƒ…๋‹ˆ๋‹ค.
2. ๋‚˜๋จธ์ง€ ์ธ์‡„ ๋Œ€๊ธฐ๋ชฉ๋ก์—์„œ J๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ํ•œ ๊ฐœ๋ผ๋„ ์กด์žฌํ•˜๋ฉด J๋ฅผ ๋Œ€๊ธฐ๋ชฉ๋ก์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
3. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด J๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 4๊ฐœ์˜ ๋ฌธ์„œ(A, B, C, D)๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ธ์‡„ ๋Œ€๊ธฐ๋ชฉ๋ก์— ์žˆ๊ณ  ์ค‘์š”๋„๊ฐ€ 2 1 3 2 ๋ผ๋ฉด C D A B ์ˆœ์œผ๋กœ ์ธ์‡„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ธ์‡„๋ฅผ ์š”์ฒญํ•œ ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ C๋Š” 1๋ฒˆ์งธ๋กœ, A๋Š” 3๋ฒˆ์งธ๋กœ ์ธ์‡„๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋Œ€๊ธฐ๋ชฉ๋ก์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ์ค‘์š”๋„๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋‹ด๊ธด ๋ฐฐ์—ด priorities์™€ ๋‚ด๊ฐ€ ์ธ์‡„๋ฅผ ์š”์ฒญํ•œ ๋ฌธ์„œ๊ฐ€ ํ˜„์žฌ ๋Œ€๊ธฐ๋ชฉ๋ก์˜ ์–ด๋–ค ์œ„์น˜์— ์žˆ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” location์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋‚ด๊ฐ€ ์ธ์‡„๋ฅผ ์š”์ฒญํ•œ ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ ์‚ฌํ•ญ

์ค‘์š”๋„๋Š” ์ˆซ์ž๊ฐ€ ํด์ˆ˜๋ก ํฌ๋‹ค. 

 

 

์ผ๋‹จ 3๊ฐœ์˜ J๋ฌธ์„œ์—์„œ ๋ณด์•˜์„ ๋•Œ ๋ˆ„๊ฐ€ ๋ด๋„ Queue๋ฅผ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

Queue์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ADT ์ด๋ฏ€๋กœ ๋ณดํ†ต LinkedList ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ํ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์ด์šฉํ•˜๊ธฐ๋ณด๋‹ค ํ๋ฅผ ๊ตฌํ˜„ํ•œ ์šฐ์„ ์ˆœ์œ„ ํ ํด๋ž˜์Šค PriorityQueue๋ฅผ ์ด์šฉํ•ด ํ’€์–ด๋ณด๊ฒ ๋‹ค. 

PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());

1. ์ƒ์„ฑ์ž๋Š” compartor๋ฅผ ์ธ์ž๋กœ ๋ฐ›์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ๋Š” Collections๋ฅผ ์ด์šฉํ•ด ์šฐ์„ ์ˆœ์œ„ ์ˆซ์ž๊ฐ€ ํฐ ์ˆœ์ด๋ฏ€๋กœ ๋ฐ˜๋Œ€๋กœ ์ •๋ ฌํ–ˆ๋‹ค.

 

2. ํ์—๋‹ค๊ฐ€ ํ”„๋กœํผํ‹ฐ ๋ฐฐ์—ด์„ ๋„ฃ์–ด์คฌ๋‹ค. 

for (int i : priorities) {
    priorityQueue.add(i);
}

3. ํ์—์„œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฐ’๊ณผ ์ธ์ž ๋ฐฐ์—ด ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๊ณ  ์ด ๋•Œ ๋‹ต ์ธ๋ฑ์Šค๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

 

4. ์ฐจ๋ก€๋Œ€๋กœ ํ์—์„œ ์šฐ์„  ์ˆœ์œ„ ๊ฐ’์„ ๋นผ๋‚ธ๋‹ค. 

 

5. ์ธ๋ฑ์Šค ์ธ์ž์™€ ๋ฐ˜๋ณต ์ธ๋ฑ์Šค๊ฐ€ ๊ฐ™์•„์งˆ ๋•Œ๊ฐ€ ์ •๋‹ต์ด๋‹ค. 

 

public int solution(int[] priorities, int location) {
    int answer = 0;

    PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());

    for (int i : priorities) {
        priorityQueue.add(i);
    }

    while (!priorityQueue.isEmpty()) {
        for (int i = 0; i < priorities.length; i++) {
            if (priorityQueue.peek() == priorities[i]) {
                priorityQueue.poll();
                answer++;

                if (location == i) {
                    return answer;
                }
            }
        }
    }
    return answer;
}

 

๊ฒฐ๊ตญ ํ•ต์‹ฌ์€ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ธ๋ฑ์Šค ๋น„๊ต๋ฅผ ํ•˜๋ฉฐ ๊ฐ™์ง€ ์•Š์„ ๋•Œ ์ธ๋ฑ์Šค ์ƒ์Šน, ๊ฐ™์„ ๋•Œ ๊ทธ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์ •๋‹ต์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋ฌธ์ œ ์กฐ๊ฑด ์ž์ฒด์—์„œ ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ๊ฑด ์ œ์ผ ๋งˆ์ง€๋ง‰์— ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์—ฐํžˆ ํ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๊ณ , ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ๋ฅผ ๊ตฌํ˜„ํ•œ ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ ๊ฒƒ์ด๋‹ค.

 

๋ฐ˜์‘ํ˜•