본문 바로가기

알고리즘

(JAVA) 주식가격

문제 설명

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

제한사항
  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.
입출력 예
pricesreturn
[498,501,470,489][2,1,1,0]
입출력 예 설명
  • 1초 시점의 ₩498은 2초간 가격을 유지하고, 3초 시점에 ₩470으로 떨어졌습니다.
  • 2초 시점의 ₩501은 1초간 가격을 유지하고, 3초 시점에 ₩470으로 떨어졌습니다.
  • 3초 시점의 ₩470은 최종 시점까지 총 1초간 가격이 떨어지지 않았습니다.
  • 4초 시점의 ₩489은 최종 시점까지 총 0초간 가격이 떨어지지 않았습니다.

class Solution {

    int[] answer;

    public int[] solution(int[] prices) {

            int size = prices.length;

            answer = new int[size];

        if(prices.length>=2&&prices.length<=100000){

            for(int i=0; i<size;i++){

                if(prices[i]<=10000&&prices[i]>=1){

                    int present = prices[i];

                    int cnt=0;

                    for(int j=i; j<size-1;j++){

                        if(present<=prices[j]){

                            cnt++;

                        }else{

                            break;

                        }

                    }

                    answer[i]=cnt;

                }

            }

        }

        return answer;

    }

}

------------------------------------------------------

import java.util.Stack;

class Solution {
    public int[] solution(int[] prices) {
        Stack<Integer> beginIdxs = new Stack<>();
        int i=0;
        int[] terms = new int[prices.length];

        beginIdxs.push(i);
        for (i=1; i<prices.length; i++) {
            while (!beginIdxs.empty() && prices[i] < prices[beginIdxs.peek()]) {
                int beginIdx = beginIdxs.pop();
                terms[beginIdx] = i - beginIdx;
            }
            beginIdxs.push(i);
        }
        while (!beginIdxs.empty()) {
            int beginIdx = beginIdxs.pop();
            terms[beginIdx] = i - beginIdx - 1;
        }

        return terms;
    }
}

----------------------------------------------

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

출처: https://programmers.co.kr

'알고리즘' 카테고리의 다른 글

(JAVA) K번째 수  (0) 2018.10.23
(JAVA) 다리를 지나는 트럭  (0) 2018.10.23
(JAVA) 완주하지 못한 선수  (0) 2018.09.19
(JAVA) 땅따먹기  (0) 2018.09.17
(JAVA) 나머지 한 점  (0) 2018.09.15