[Algorithm] ๐Ÿ†™ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฃผ์‹๊ฐ€๊ฒฉ

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

Algorithm

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

0. ๋ฌธ์ œ

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

์ œํ•œ์‚ฌํ•ญ
prices์˜ ๊ฐ ๊ฐ€๊ฒฉ์€ 1 ์ด์ƒ 10,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
prices์˜ ๊ธธ์ด๋Š” 2 ์ด์ƒ 100,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ
prices return
[1, 2, 3, 2, 3][4, 3, 1, 1, 0]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…
1์ดˆ ์‹œ์ ์˜ โ‚ฉ1์€ ๋๊นŒ์ง€ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
2์ดˆ ์‹œ์ ์˜ โ‚ฉ2์€ ๋๊นŒ์ง€ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
3์ดˆ ์‹œ์ ์˜ โ‚ฉ3์€ 1์ดˆ๋’ค์— ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1์ดˆ๊ฐ„ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋ด…๋‹ˆ๋‹ค.
4์ดˆ ์‹œ์ ์˜ โ‚ฉ2์€ 1์ดˆ๊ฐ„ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
5์ดˆ ์‹œ์ ์˜ โ‚ฉ3์€ 0์ดˆ๊ฐ„ ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

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

๐Ÿ’ก queue ์‚ฌ์šฉ
๐Ÿ’ก queue์—์„œ ํ•˜๋‚˜ ๋นผ๋‚ด๊ณ  queue์— ๋“ค์–ด์žˆ๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ๋นผ๋‚ธ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด break ์•„๋‹ˆ๋ฉด +1
๐Ÿ’ก ์ง€๊ธˆ ์‹œ์ ์— ์žˆ๋Š” ๋ˆ์„ ๊ธฐ์ค€์œผ๋กœ ๋ช‡์ดˆ ํ›„์— ์ง€๊ธˆ ๋ˆ๋ณด๋‹ค ๋–จ์–ด์ง€๋Š” ์ง€๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ž„

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

  1. queue ์‚ฌ์šฉ
Queue<Integer> q = new LinkedList<Integer>();
  1. queue์—์„œ ํ•˜๋‚˜ ๋นผ๋‚ด๊ณ  queue์— ๋“ค์–ด์žˆ๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ๋นผ๋‚ธ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด break ์•„๋‹ˆ๋ฉด +1
while(!q.isEmpty()){
            int tmp = q.poll();
            
            for(int target : q){
                answer[idx]++;
                if(tmp > target){
                    break;
                }
            }
            
            idx++;
        }

3. ์ฝ”๋“œ

import java.util.*;
class Solution {
    public int[] solution(int[] prices) {
        int len = prices.length;
        int[] answer = new int[len];
        Queue<Integer> q = new LinkedList<>();
        
        for(int i=0; i<len; i++){
            q.add(prices[i]);
        }
        
        int idx = 0;
        
        while(!q.isEmpty()){
            int tmp = q.poll();
            
            for(int target : q){
                answer[idx]++;
                if(tmp > target){
                    break;
                }
            }
            
            idx++;
        }
        
        return answer;
    }
}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

๋ฌธ์ œ ์„ค๋ช… ์ง„์งœ ๊ฑฐ์ง€๊ฐ™๋‹ค๐Ÿคฌ

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

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