-
프로그래머스 - 주식가격개발/Algorithm 2021. 3. 9. 12:03
programmers.co.kr/learn/courses/30/lessons/42584
@Test void stockPrice(){ int[] prices = new int[] { 2, 1, 2, 3, 1, 2, 4, 3 }; int[] result = solution(prices); System.out.println(Arrays.toString(result)); } public int[] solution(int[] prices) { int[] answer = new int[prices.length]; Stack<int[]> stack = new Stack<>(); for (int i = prices.length - 2; i >= 0; i--) { //앞의 가격이 더 클 경우 일수는 1, //앞으로 비교하게 될 값 if (prices[i] > prices[i+1]){ answer[i] = 1; int[] lowerPriceAndIdx = new int[] { prices[i+1],i+1}; stack.push(lowerPriceAndIdx); } else { //앞이 더 낮은 경우 뒤에 나오는 낮은 가격과 비교 <- 저장된 스택과 비교 while (!stack.isEmpty() && prices[i] <= stack.peek()[0]) { //이후 이 값이 최저가격 기준이 될 것이기 때문에 고려하지 않아도 될 현재보다 큰 값들은 삭제 stack.pop(); } //stack이 비었다는 것은 현재 가격이 가장 작은 것! if (stack.isEmpty()){ answer[i] = prices.length - i -1; } else { //stack까지 일수 answer[i] = stack.peek()[1] - i; } } } return answer; }
'개발 > Algorithm' 카테고리의 다른 글
어떤 수를 서로 다른 소수 3개의 합으로 표현하는 경우의 수 (0) 2019.02.25 댓글