[Algorithm] ๐Ÿ–จ๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํ”„๋ฆฐํ„ฐ

HaJingJingยท2021๋…„ 8์›” 30์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
108/119

0. ๋ฌธ์ œ

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

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 ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ
ํ˜„์žฌ ๋Œ€๊ธฐ๋ชฉ๋ก์—๋Š” 1๊ฐœ ์ด์ƒ 100๊ฐœ ์ดํ•˜์˜ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ธ์‡„ ์ž‘์—…์˜ ์ค‘์š”๋„๋Š” 1~9๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ์ˆซ์ž๊ฐ€ ํด์ˆ˜๋ก ์ค‘์š”ํ•˜๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
location์€ 0 ์ด์ƒ (ํ˜„์žฌ ๋Œ€๊ธฐ๋ชฉ๋ก์— ์žˆ๋Š” ์ž‘์—… ์ˆ˜ - 1) ์ดํ•˜์˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ ๋Œ€๊ธฐ๋ชฉ๋ก์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ์œผ๋ฉด 0, ๋‘ ๋ฒˆ์งธ์— ์žˆ์œผ๋ฉด 1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ
priorities location return
[2, 1, 3, 2] 2 1
[1, 1, 9, 1, 1, 1] 0 5

1. ์•„์ด๋””์–ด

๐Ÿ’ก queue ์‚ฌ์šฉ
๐Ÿ’ก queue ๋งจ ์•ž์— ์žˆ๋Š” ๊ฒƒ์„ ๊ฐ€์ ธ์™€ ๋’ค์— ํฐ ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด flag = true
๐Ÿ’ก flag๊ฐ€ true๋ผ๋ฉด ์ด ์ˆซ์ž๋ฅผ ๋นผ์„œ ๋งจ ๋’ค์— ๋„ฃ์Œ
๐Ÿ’ก ๋‚ด๊ฐ€ ๋นผ๋‚ด๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ํฌ๊ณ  ๋งจ ์•ž์— ์™”์„ ๋•Œ, queue์— ๋‚จ์•„์žˆ๋Š” size ๋ฅผ ์ด์šฉํ•˜์—ฌ answer ๊ณ„์‚ฐ

2. ํ•ต์‹ฌ ํ’€์ด

  1. queue ์‚ฌ์šฉ
Queue<Integer> q = new LinkedList<Integer>();
  1. queue ๋งจ ์•ž์— ์žˆ๋Š” ๊ฒƒ์„ ๊ฐ€์ ธ์™€ ๋’ค์— ํฐ ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด flag = true
int cur = q.peek().pri;
boolean flag = false;
            
for(Priority p : q){
	if(cur < p.pri) flag = true;
}
  1. flag๊ฐ€ true๋ผ๋ฉด ์ด ์ˆซ์ž๋ฅผ ๋นผ์„œ ๋งจ ๋’ค์— ๋„ฃ์Œ
if(flag) q.add(q.poll());
  1. ๋‚ด๊ฐ€ ๋นผ๋‚ด๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ํฌ๊ณ  ๋งจ ์•ž์— ์™”์„ ๋•Œ, queue์— ๋‚จ์•„์žˆ๋Š” size ๋ฅผ ์ด์šฉํ•˜์—ฌ answer ๊ณ„์‚ฐ
else {
	if(q.poll().idx == location){
 		answer = priorities.length - q.size();
 	}
}

3. ์ฝ”๋“œ

import java.util.*;

class Programmers2 {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        
        Queue<Priority> q = new LinkedList<>();
        
        for(int i=0; i<priorities.length; i++){
            q.add(new Priority(i, priorities[i]));
        }
        
        while(!q.isEmpty()){
            int cur = q.peek().pri;
            boolean flag = false;
            
            for(Priority p : q){
                if(cur < p.pri) flag = true;
            }
            
            if(flag) q.add(q.poll());
            else {
                if(q.poll().idx == location){
                    answer = priorities.length - q.size();
                }
            }
        }
        return answer;
    }
    
    public static class Priority {
        int idx;
        int pri;
        
        Priority(int idx, int pri){
            this.idx = idx;
            this.pri = pri;
        }
    }
}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€