[프로그래머스] 주식가격 (Stack)

2025. 5. 20. 12:03·Algorithm/Coding Test Records

문제 소개

오늘 풀었던 프로그래머스 - 주식가격 문제를 정리합니다.

이 문제는 언제 가격이 떨어지는지를 초 단위로 측정하여 각 시점마다 가격이 떨어지지 않은 기간을 반환하는 문제입니다.

문제 링크: 주식가격 - 프그래머스


문제 접근 방식

이 문제는 다음과 같은 방식으로 접근했습니다:

  1. 각 시점의 인덱스를 스택에 저장하면서
    현재 가격이 과거보다 낮아지는 순간을 탐지
  2. 가격이 하락하면, 해당 시점까지 걸린 시간을 계산해 기록
  3. 마지막까지 가격이 떨어지지 않은 항목은
    배열 끝까지 유지된 것으로 처리 (n - 1 - i)

해결 과정 및 코드

핵심 아이디어

  1. stack에는 가격이 아직 떨어지지 않은 시점의 인덱스를 담음
  2. 현재 가격이 더 낮으면, 이전 가격의 유효 시간이 끝난 것 → 현재 인덱스 - 이전 인덱스
  3. 끝까지 유지된 항목은 배열 끝 - 현재 위치

코드

시간 복잡도 : O(N)

import java.util.*;

class Solution {
    public int[] solution(int[] prices) {
        int n = prices.length;
        int[] answer = new int[n];
        ArrayDeque<Integer> stack = new ArrayDeque<>();

        for (int i = 0; i < n; i++) {
            // 가격이 떨어지는 시점 발견
            while (!stack.isEmpty() && prices[i] < prices[stack.peek()]) {
                int idx = stack.pop();
                answer[idx] = i - idx;
            }
            stack.push(i);
        }

        // 끝까지 가격이 떨어지지 않은 경우 처리
        while (!stack.isEmpty()) {
            int idx = stack.pop();
            answer[idx] = n - 1 - idx;
        }

        return answer;
    }
}

단순 구현으로 해결할 경우(O(N²))

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

'Algorithm > Coding Test Records' 카테고리의 다른 글

[프로그래머스] 게임 맵 최단거리 (A* 알고리즘)  (1) 2025.05.23
[프로그래머스] 게임 맵 최단거리 (BFS)  (0) 2025.05.22
[프로그래머스] 다리를 지나는 트럭 (Queue)  (1) 2025.05.19
[프로그래머스] 프로세스 (Queue)  (1) 2025.05.18
[프로그래머스] 올바른 괄호 (시뮬레이션)  (0) 2025.05.17
'Algorithm/Coding Test Records' 카테고리의 다른 글
  • [프로그래머스] 게임 맵 최단거리 (A* 알고리즘)
  • [프로그래머스] 게임 맵 최단거리 (BFS)
  • [프로그래머스] 다리를 지나는 트럭 (Queue)
  • [프로그래머스] 프로세스 (Queue)
Celion
Celion
오늘도 평소처럼 화이팅!
  • Celion
    Orion Log
    Celion
  • 전체
    오늘
    어제
    • 전체 글 (144)
      • Uncompiled Thoughts (8)
        • 네이버 부스트캠프 10기 (5)
      • CS 기초부터 한 걸음씩 (34)
      • Code Odyssey (22)
      • Algorithm (77)
        • Coding Test Records (63)
      • Git (3)
      • reference (0)
  • 블로그 메뉴

    • 태그
    • 방명록
  • 태그

    Level3
    코테
    Level2
    알고리즘고득점kit
    Kotlin
    프로그래머스
    java
    boostcamp
    문법정리
    백준
    시뮬레이션
    greedy
  • 최근 글

  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
Celion
[프로그래머스] 주식가격 (Stack)
상단으로

티스토리툴바