티스토리 뷰

https://programmers.co.kr/learn/courses/30/lessons/42584?language=java

 

코딩테스트 연습 - 주식가격 | 프로그래머스

초 단위로 기록된 주식가격이 담긴 배열 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은 끝까지 가격이 떨어지지

programmers.co.kr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
class Solution {
    public int[] solution(int[] prices) {
        Queue<Integer> q = new LinkedList<>();
        ArrayList<Integer> downSeconds = new ArrayList<>();
        int second = 0;
        int index = 0;
 
        for(int price : prices) {
            q.offer(price);
        }
        while(!q.isEmpty()) {
            index++;
            if(index == prices.length) {
                break;
            }
            for(int i = index; i < prices.length; i++) {
                second++;
                if(q.peek() > prices[i]) {
                    downSeconds.add(second);
                    second = 0;
                    q.poll();
                    break;
                }
                if(i == prices.length - 1) {
                    downSeconds.add(second);
                    second = 0;
                    q.poll();
                }
            }
        }
 
        downSeconds.add(0);
 
        return downSeconds.stream().mapToInt(i -> i).toArray();
    
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

문제가 애매해서 다시보고 또보고 다른 사람 질문도 보고 했다.

결국 문제는 초당 주식 가격이 담겨져있는 배열이 있는데 거기서 떨어지는 순간까지의 시간을 구하라는 것

ex) prices[0] = 3 (1초일 때 3원), prices[1] = 2 (2초 일 때 2원) ...

그럼 1초 -> 2초가 될 때 1원이 떨어지므로 1초

{1, 2, 3, 4, 3} 이면 1초일 때 1원이 떨어지는 구간이 없기에 끝까지 쭉 가서 4초!

(나도 표현을 잘 못하는구나 이게 문제로 풀어내기가 겁나게 어렵구나...)

왠지 스택/큐 카테고리 문제라 큐를 사용해야할거만 같아서 큐를 사용했다.

댓글