문제
https://school.programmers.co.kr/learn/courses/30/lessons/42584
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
< 주식가격 >
문제 풀이 (Java)
import java.util.*;
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
Stack<int[]> stack = new Stack<>();
for (int i = 0; i < prices.length; i++) {
while (!stack.isEmpty() && stack.peek()[0] > prices[i]) {
answer[stack.peek()[1]] = i - stack.peek()[1];
stack.pop();
}
stack.add(new int[] { prices[i], i });
}
while (!stack.isEmpty()) {
answer[stack.peek()[1]] = prices.length - 1 - stack.peek()[1];
stack.pop();
}
return answer;
}
}
prices를 순회하며 stack에 추가한다. 이때, 추가하기 전에 현재 stack이 비어있지 않고, stack의 peek 값이 prices 현재 값보다 크다면 가격이 떨어진 것이므로 해당 조건을 만족하는 동안 다음 과정을 반복한다.
1. answer에 가격이 떨어지지 않은 기간을 저장
2. pop
prices를 다 순회하고 stack이 비어있지 않다면 stack을 비우며 answer에 가격이 떨어지지 않은 기간을 저장한다. 최종 answer을 반환한다.

출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'🌞Algorithm > 🔥programmers' 카테고리의 다른 글
| [programmers] 올바른 괄호 (0) | 2026.08.12 |
|---|---|
| [programmers] 같은 숫자는 싫어 (0) | 2026.08.10 |
| [programmers] K번째수 (0) | 2026.07.31 |
| [programmers] 완주하지 못한 선수 (0) | 2026.07.30 |
| [programmers] 디스크 컨트롤러 (0) | 2026.07.29 |