문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
핵심 아이디어
- 결과 배열 초기화: answer 배열을 prices 길이만큼 0으로 초기화한다.
- 스택을 사용한 가격 비교: 주식 가격을 순차적으로 탐색하며, 이전 가격과 비교하기 위해 인덱스를 스택에 저장한다.
- 가격이 하락할 때 처리: 현재 주식 가격이 스택에 저장된 이전 주식 가격보다 낮으면, 스택에서 인덱스를 꺼내고, 그 차이를 계산해 answer 배열에 기록한다.
- 남은 스택 처리: 스택에 남아 있는 인덱스들은 끝까지 가격이 떨어지지 않은 경우로, 그 차이를 계산해 answer 배열에 기록한다.
- 결과 반환: 모든 계산이 완료된 후 answer 배열을 반환한다.
정답
function solution(prices) {
const answer = Array(prices.length).fill(0);
const stack = [];
prices.forEach((price, index) => {
while (stack.length > 0 && prices[stack[stack.length - 1]] > price) {
const prevIndex = stack.pop();
answer[prevIndex] = index - prevIndex;
}
stack.push(index);
});
while (stack.length > 0) {
const prevIndex = stack.pop();
answer[prevIndex] = prices.length - prevIndex - 1;
}
return answer;
}