본문 바로가기
알고리즘/항해99 스터디

99클럽 코테 스터디 4일차 TIL - 스택

2024. 5. 23.

항해99 코테 스터디 4일차 문제인 프로그래머스의 '주식가격'은 매초마다 주어지는 주식의 가격이 떨어지지 않은 기간을 구하는 문제다. 난이도는 레벨2이며 스택이나 우선순위큐를 통해 해결할 수 있다.

 

오늘의 문제 - 주식가격 문제 정보

문제 키워드

- 스택/큐

난이도

- Level 2

 

문제 요약

  • 매초 주식의 가격이 배열로 주어질 때, 가격이 떨어지지 않은 기간을 가각 구하여라.

 

문제 풀이 과정  

    • 스택에 매초마다 가격을 삽입하는데, 삽입하기 전에 현재 가격보다 높은 요소들을 모두 꺼내 정답을 업데이트한다.
    • 또는 가격 내림차순으로 정렬되는 우선순위큐를 사용해 매초마다 가격을 삽입하고 현재 가격보다 높은 요소들을 모두 꺼내 정답을 업데이트한다.
    • 이 문제에서는 우선순위큐보다 스택을 이용한 방법이 좀 더 간편하다.

코드

import java.util.*;
class Solution {
public int[] solution(int[] prices) {
int N = prices.length;
int[] answer = new int[N];
Stack<Price> stack = new Stack<>();
for(int t=0; t<N; t++) {
int nowPrice = prices[t];
// 현재 가격보다 높았던 때를 모두 pop
while(!stack.isEmpty()) {
if (stack.peek().p > nowPrice) {
Price price = stack.pop();
answer[price.t] = t - price.t;
} else {
break;
}
}
stack.add(new Price(t, nowPrice));
}
// 스택에 남은 거(가격이 끝까지 떨어지지 않은 것) 모두 꺼내면서 정답 배열 업데이트
while(!stack.isEmpty()) {
Price price = stack.pop();
answer[price.t] = N - price.t - 1;
}
return answer;
}
class Price {
int t;
int p;
public Price(int t, int p) {
this.t = t;
this.p = p;
}
}
}
  • 시간복잡도: O(N)
  • 공간복잡도: O(N)

 

오늘의 학습 회고

새롭게 알게된 것

  • 항상 더 간단한 풀이방법이 있는지도 고민해보자.
  • 스택/큐 등 기본적인 자료구조의 사용법은 까먹지 말고 기억해두자
728x90

댓글