코딩테스트 준비/프로그래머스

Programmers [고득점 Kit - 스택/큐] Java 풀이 : 주식가격

김또롱 2020. 8. 26. 20:30

주식가격

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

문제 설명

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

제한 사항

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

입출력 예

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

입출력 예 설명

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

구해야 하는 것은 가격이 떨어지지 않은 기간 (몇 초) 인지를 구하는 것이다.

 

입출력 예를 보면,

 

1초 시점에선 ₩1 (배열의 위치 = 0)은 끝까지(배열의 위치 = 4) 떨어지지 않았다. 4 - 0 = 4초

 

2초 시점에선 ₩2 (배열의 위치 = 1)은 끝까지 (배열의 위치 = 4) 떨어지지 않았다. 4 - 1 = 3초

 

3초 시점에선 ₩3 (배열의 위치 = 2)은 1초 뒤 (배열의 위치 = 3) 에 떨어진다. 3 - 2 = 1초

 

4초 시점에선 ₩4 (배열의 위치 = 3)은 끝까지 (배열의 위치 = 4) 떨어지지 않았다. 4 - 3 = 1초

 

5초 시점에선 ₩5 (배열의 위치 = 4)은 뒤에 값이 없으니 0초간 떨어지지 않는다. 4 - 4 = 0초

 

즉, 가격이 떨어지지 않은 기간(몇 초)은 값이 낮아지는 배열의 위치(없을 경우 배열의 길이) - 기준 배열의 위치이다.

 

 

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];

        for(int i=0;i<prices.length-1;i++){
            int index = prices.length - 1;
            for(int j=i+1;j<prices.length;j++){
                if(prices[i]>prices[j]){
                    index = j;
                    break;
                }
            }
            answer[i] = index - i;
        }
        
        return answer;
    }
}

 

int형 변수 index는 값이 낮아지는 배열의 위치(없을 경우 배열의 길이) 이다. 초기값은 배열의 길이(5) - 1 이다.

 

첫번째 for문은 기준점을 잡을 반복문이고, 두번째 for문은 값을 비교할 반복문이다.

 

가격이 낮아질 때 ( if(prices[i]>prices[j]) ) index에 값이 낮아지는 배열의 위치를 담는다.

 

그리고 이 조건을 만족하면 두번째 for문을 빠져나와,

 

answer배열에  값이 낮아지는 배열의 위치(없을 경우 배열의 길이) - 기준 배열의 위치 를 계산한 값을 담는다.

 

이 같은 방법을 반복하면 결과값이 나온다.

 

 


스택과 큐로 풀지 못하여 아쉬움이 남는다. 

 

다음번엔 꼭 스택과 큐를 사용하여 풀어보겠다.

 

Github 주소

https://github.com/MIN-04/CodingTest/blob/master/Programmers/PracticeKit/Stack_Queue/No42584.java

 

MIN-04/CodingTest

코딩테스트 준비 / 문제 풀이. Contribute to MIN-04/CodingTest development by creating an account on GitHub.

github.com