프로그래머스/코딩테스트

스택/큐 - Lv2 주식가격

tunta 2023. 10. 20. 21:42
반응형

문제 설명
초 단위로 기록된 주식가격이 담긴 배열 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초간 가격이 떨어지지 않았습니다.

 

처음 문제풀었는 방식은 아래와 같았습니다.

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        for(int i=0; i<prices.length; i++){
            for(int j=i+1; j<prices.length; j++){
                if(prices[i] <= prices[j]){
                    answer[i]++;
                }
            }
        }
        return answer;
    }
}

이 문제를 보면서 문제를 조금 끝까지 보자라는 생각을 했습니다.

1초 시점에서 다음으로 넘어가는 그 순간을 1초라고 생각을 했지만

 

첫 풀이에서는 [가격이 떨어지지 않은 기간] 이것을 이후 시간 동안 떨어지지 않은 총합으로 생각해서 문제를 풀었더니 채점 문제에서 1번 문제만 성공하고 전부 틀리는 문제가 발생했습니다.

 

그러고 이후에 문제를 다시 한번 보니까

3초 시점에서 1초되에 가격이 떨어진다. 따라서 1초간 가격이 떨어지지 않았다 라는 문구를 보게되니

떨어진 시점 까지의 소비시간이 문제에서 요구하는 [ 가격이 떨어지지 않은 기간 ] 이었던것을 인지하고 다시한번 풀었더니 문제없이 통과가 가능해 졌다.

 

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        for(int i=0; i<prices.length; i++){
            for(int j=i+1; j<prices.length; j++){
                answer[i]++;
                if(prices[i] <= prices[j]){
                }else{
                    break;
                }
            }
        }
        return answer;
    }
}
반응형