본문 바로가기
Coding Test/Programmers

[프로그래머스] 주식가격 [JAVA(자바)]

‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀

문제 👉 <코딩테스트 연습 - 주식가격 | 프로그래머스>

1. 문제

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지 구한다.

2. 풀이

스택 를 이용한 문제 풀이

  1. 주식이 떨어지지 않은 기간은 ans배열로, 주식이 떨어지지 않은 기간을 구하기 위해 stack을 사용한다.
  2. 반복문을 돌면서 현재 주식 가격을 stack에 push한다.
  3. push 전에 현재 주식가격이 스택의 맨 위에 있는 주식보다 작으면
    1. 현재 주식과 스택의 맨 위 주식의 시간을 구한다.
    2. 스택의 맨위 주식을 pop한다.
  4. 반복문이 끝나고 남아있는 주식은 끝까지 가격이 떨어지지 않은 주식이므로 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


🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋

댓글