본문 바로가기

알고리즘(Java)/programmers

[JAVA] 주식 가격(코딩테스트 고득점 Kit[스택/큐]) - LEVEL2

📂문제 설명

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

제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

pricesreturn

[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

입출력 예 설명

  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

※ 공지 - 2019년 2월 28일 지문이 리뉴얼되었습니다.

 


📂아이디어 및 알고리즘

  • 스택/큐 문제 였지만 for문을 이용하여 해당 prices[i]를 순회할 때마다 그 다음for문인 prices[j]값과 비교하여 작아질때 j -i로 하여 얼마동안 가격이 떨어지지 않는지 구할 수 있다.
  • 그리고 j == prices.length-1 의 조건으로 마지막 순번일 경우를 생각해 주었다.  

📂소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
   public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        int index=0;
        for(int i=0;i<prices.length-1;i++) {
            int count =0;
            for(int j=i+1;j<prices.length;j++) {
                if(prices[i] > prices[j] || j == prices.length-1) {
                    count = j - i;
                    break;
                }
            }
            answer[index++= count;
        }
        return answer;
    }
}
cs

 

📂코드 결과

 

📂후일담

비교적 쉬운 문제였고 Queue를 어떻게 사용할까 고민을 많이 하다가 그냥 직관적인 생각으로 풀었다.

다음번에 Queue로 해결하는 걸로 한 번 올려야겠다.!!💻💻