본문 바로가기

알고리즘/Programers

Programmers - 스택/큐 [주식가격]

1. 문제

 

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 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초간 가격이 떨어지지 않았습니다.

 

2. 내풀이

아얘.. 문제 이해를 못했다. 다른 사람 풀이를 보고 문제를 이해 하였다.

문제에 대한 이해를 풀어서 설명해본다.

 

이문제는 price[0]이 price[i]보다 언제 커지는지 까지 걸리는 시간을 answer[0]에 넣는 문제이다.

즉, 문제의 예제에서 price[0]인 1은 다음 값인 price[1]보다 작다. 따라서 1초가 늘어나고

다음 price[2]인 3과 비교된다. 역시 작으므로 1초가 더 늘어나고 계속해서 price의 끝인

price[4]인 3보다 작으므로 역시 1초가 늘어나서 총 4초동안 가격이 떨어지지 않는다.

answer[0] = 4 가된다.

 

그다음은 price[1]이 되겠다. 하지만 price[1]은 price[2]부터 비교가된다. 마찬가지로 끝까지

price[i]보다 커지지 않으므로 총 3초동안 가격이 떨어지지 않아서 answer[1]은 3이된다.  

 

이러한 형태이다.

3. 다른 사람 풀이

public class Stockprice {
    public int[] solution(int[] prices) {
        int[] answer = {};
        // answer의 크기는 prices의 크기와 같다.
        answer = new int[prices.length];
        // 가격이 내려가지 않는 시간.
        int count  = 0;
        // prices[0]부터 시작해서 price[prices.length - 1]까지 간다.
        for (int i = 0; i < prices.length; i++) {
            // prices[i]의 비교는 price[i + 1]부터 시작되므로
            for (int j = i + 1; j < prices.length; j++) {
                // prices[i]가 prices[j]보다 작다면 count ++
                if(prices[i] <= prices[j]){
                    count++;
                }
                // prices[i]가 price[j] 보다 크다면 count ++후 종료 ,answer[i+1]차례로 넘어감
                else{
                    count++;
                    break;
                }

            }
            //answer[i]는 count를 넣고
            answer[i] = count;
            //count는 다음 answer[i + 1]를 위해서 초기화.
            count = 0;
        }
        return answer;
    }
}

4. Tip

- 문제풀이를 이해를 제대로해라. : 문제 설명이 조금더 부드러웠으면 좋겠다.

- 이중배열문으로 풀되 쓸데 없는 계산을 배제 하고 if else문으로 예외처리를 확실히 한다.