Algorithm/Programmers

[프로그래머스] Lv2. 주식가격 (스택/큐)

woojeans7 2025. 5. 12. 16:14

 

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


문제 파악

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

prices return
[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

초 단위로 기록된 주식가격이 담긴 배열 price, 가격이 떨어지지 않은 기간은 몇 초인지 return

  • 1은 5초때까지 떨어진 적이 없음 → 4초
  • 2는 오름 2, 유지 1 → 3초
  • 3은 떨어짐 1, 유지 1 → 1초
  • 2는 오름 1 → 1초
  • 3은 다음 시간이 없음 → 0초

접근 방법

자기 자신보다 작아질 때를 카운트 0, 자기 자신보다 크거나 같을 때를 카운트 +1

1초 때는 n-1번, 2초 때는 n-2번을 만족시켜야 함 그리고 n초에는 0번

 

먼저 들어온 요소를 먼저 처리하는 “큐”를 이용

 

먼저 꺼내서 나머지랑 비교하고 종료.

그 다음 요소를 꺼내서 비교하고 종료 반복

 

❗️주의할 점

떨어진 순간 볼 필요가 없기 때문에 바로 종료한다.

크거나 같은 기간을 카운트 하지만 얼마나 유지했는가를 보는 문제임.


코드 구현

import java.util.*;

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        Queue<Integer> queue = new LinkedList<>();

        // 큐를 생성함.
        for (int price : prices) {
            queue.offer(price);
        }

        for (int i = 0; i < prices.length; i++){
                // 현재의 정보를 저장
            int current = queue.poll();
            // 기간을 카운트할 변수 지정
            int cnt = 0;

            for(int num : queue){
                cnt++;
                // 현재 가격보다 떨어지는 순간 종료
                if (current > num) break;
            }
            answer[i] = cnt;
        }
        return answer;
    }
}