알고리즘/프로그래머스

[프로그래머스] 주식가격_JAVA

jimkwon 2022. 2. 11. 14:50
반응형

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/42584

 

코딩테스트 연습 - 주식가격

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00

programmers.co.kr

더보기

입출력 예

 prices                                                                   return
[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.

현재 prices[i]와 비교하는 prices[j]의 간극을 재어 return하면 된다.

단 바로 다음 주식에서 가격이 떨어지더라도 위의 예처럼 1초간은 가격이 떨어지지 않았으니 해당 부분만 유의하여 풀이하면 된다.

 

import java.util.Stack;
class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        Stack<Integer> stack = new Stack<>();
        int i, j;
        for (i = 0; i < prices.length - 1; i++) {
            for (j = i + 1; j < prices.length; j++) {
                if (prices[i] > prices[j])
                    break;
            }
            if (j == prices.length)
                j--;
            stack.push(j - i);
        }
        answer[stack.size()] = 0;
        for(i = stack.size() - 1; i >= 0; i--)
            answer[i] = stack.pop();
        return answer;
    }
}

사실 나는 고득점kit에서 풀이하기 때문에 해당 문제가 스택/큐를 사용하는 자료구조 풀이라는걸 알고 있었다.

이 문제를 풀며 굳이 스택이 필요할까..? 라는 생각이 들어 스택 없이도 문제를 풀이해보았다.

class Solution {
    public int[] solution(int[] prices) {
        int len = prices.length;
        int[] answer = new int[len];
        int i, j;
        for (i = 0; i < len; i++) {
            for (j = i + 1; j < len; j++) {
                answer[i]++;
                if (prices[i] > prices[j])
                    break;
            }
        }
        return answer;
    }
}

어이없게 짧은 코드..

가끔은 너무 자료구조에 얽메이지 않는것이 좋다는 교훈을 얻고간다..^_ㅜ...