‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀
문제 👉 <코딩테스트 연습 - 주식가격 | 프로그래머스>
1. 문제
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지 구한다.
2. 풀이
스택
를 이용한 문제 풀이
- 주식이 떨어지지 않은 기간은 ans배열로, 주식이 떨어지지 않은 기간을 구하기 위해 stack을 사용한다.
- 반복문을 돌면서 현재 주식 가격을 stack에 push한다.
- push 전에 현재 주식가격이 스택의 맨 위에 있는 주식보다 작으면
- 현재 주식과 스택의 맨 위 주식의 시간을 구한다.
- 스택의 맨위 주식을 pop한다.
- 반복문이 끝나고 남아있는 주식은 끝까지 가격이 떨어지지 않은 주식이므로 prices배열의 길이에서 해당 주식의 위치를 뺀 값이다.
3. 코드
import java.util.*;
class Solution {
public int[] solution(int[] prices) {
int[] ans = new int[prices.length];
Stack<Integer> stack = new Stack();
for (int i=0; i<prices.length; i++){
while (!stack.isEmpty() && prices[i] < prices[stack.peek()]){
ans[stack.peek()] = i - stack.peek();
stack.pop();
}
stack.push(i);
}
// 끝까지 가격이 떨어지지 않은 주식 = 총 길이 - 인덱스 번호 - 1
while (!stack.isEmpty()) {
ans[stack.peek()] = prices.length - stack.peek() -1;
stack.pop();
}
return ans;
}
}
References
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 기능개발 [JAVA(자바)] (0) | 2021.11.25 |
---|---|
[프로그래머스] 다리를 지나는 트럭 [JAVA(자바)] (0) | 2021.11.25 |
[프로그래머스] K번째수 [JAVA(자바)] (0) | 2021.11.25 |
댓글