12. 프로그래머스 - 주식 가격 (스택)

2025. 7. 28. 13:47·코딩 테스트 준비/문제

문제 설명

초 단위로 기록된 주식 가격이 담긴 배열 prices가 주어질 때, 각 시점의 주식 가격이 얼마나 오래 동안 떨어지지 않았는지를 계산하여 배열로 반환하는 함수를 완성하시오.


제한 사항

  • prices의 각 원소는 1 이상 10,000 이하의 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

pricesreturn
[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

입출력 예 설명

  • 0초 시점의 가격 1은 끝까지 가격이 떨어지지 않음 → 4초 동안 유지됨
  • 1초 시점의 가격 2도 끝까지 떨어지지 않음 → 3초 동안 유지됨
  • 2초 시점의 가격 3은 3초 시점에 떨어짐 → 1초 동안 유지됨
  • 3초 시점의 가격 2는 4초까지 유지됨 → 1초 동안 유지됨
  • 4초 시점의 가격 3은 이후 비교 대상이 없음 → 0초 유지됨

핵심 요구사항 요약

  • prices[i]는 i초 시점의 주식 가격
  • 각 가격이 자신보다 더 낮은 가격을 처음 만날 때까지의 시간을 초 단위로 센다
  • 만약 끝까지 떨어지지 않으면 남은 전체 시간(끝까지)을 센다

이 문제는 주식 가격이 떨어지지 않는 시간을 계산하는 것이 핵심이다.

배열 prices[i]는 i초 시점의 주식 가격을 의미한다.

  • prices = [1, 2, 3, 2, 3]
  • 시간 :       0 1  2  3  4

그러므로 각 시점에서 시작해서 언제까지 가격이 떨어지지 않는지를 측정해야 한다.

 

그렇다면 우리가 생각할 수 있는 거는 각 i번째 초에 대해, 그 시점 이후의 시간들 중에서 처음 가격이 떨어지는 시점까지의 시간을 세면 된다. 만약 끝까지 안 떨어지면 전체 남은 시간을 세면 된다.

 

또한 시간 복잡도도 생각해 봐야한다 입력에서 봤듯이 아래와 같은 조건이 있다. 

  • prices의 길이는 2 이상 100,000 이하입니다.

따라서 O(N^2)은 시간 초가가 되므로 스택을 이용하면 O(N) 수준으로 최적화할 수도 있다.

 

알고리즘 코드

import java.util.Stack;

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        Stack<Integer> stk = new Stack<>();
        
        for (int i = 0; i < prices.length; i++) {
        // 가격이 떨어지는 순간이 오면
            while (!stack.isEmpty() && prices[i] < prices[stack.peek()]) {
                int prevIndex = stack.pop();
                answer[prevIndex] = i - prevIndex;
            }
            stack.push(i); // 현재 인덱스를 넣는다
        }

        // 아직 떨어지지 않은 애들 (끝까지 유지됨)
        while (!stack.isEmpty()) {
            int idx = stack.pop();
            answer[idx] = prices.length - 1 - idx;
        }	
        
        return answer;
    }
}

 

시간 복잡도 분석

O(N)

'코딩 테스트 준비 > 문제' 카테고리의 다른 글

14. 프로그래머스 - 폰켓몬 (해시)  (2) 2025.07.29
13. 프로그래머스 - 더 맵게 (힙)  (1) 2025.07.28
11. 프로그래머스 - 오픈 채팅방(해시)  (2) 2025.07.21
10. 프로그래머스 - 할인 행사(해시)  (1) 2025.07.21
10. 프로그래머스 - 완주하지 못한 선수 (해시)  (2) 2025.07.12
'코딩 테스트 준비/문제' 카테고리의 다른 글
  • 14. 프로그래머스 - 폰켓몬 (해시)
  • 13. 프로그래머스 - 더 맵게 (힙)
  • 11. 프로그래머스 - 오픈 채팅방(해시)
  • 10. 프로그래머스 - 할인 행사(해시)
masxer
masxer
masxer 님의 블로그 입니다.
  • masxer
    masxer 님의 블로그
    masxer
  • 전체
    오늘
    어제
    • 분류 전체보기 (54)
      • 알고리즘 (7)
      • 코딩 테스트 준비 (34)
        • 문제 (28)
        • 개념 (6)
      • 25-1 여름방학 공모전 프로젝트 (0)
      • 스프링부트 (6)
      • 도커 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
masxer
12. 프로그래머스 - 주식 가격 (스택)
상단으로

티스토리툴바