Search

주식가격

알고리즘
스택/큐
플랫폼
프로그래머스
JCF
ArrayDeque
상태
해결
생성 일시
2024/01/11 09:49
최종 편집 일시
2024/01/11 11:31

문제 설명

해결과정

Solution.java

import java.util.*; class Solution { public int[] solution(int[] prices) { // 정답이 들어갈 변수 answer // prices의 원소의 인덱스 i, prices[i] 값 보다 작으면서 가장 가까운 원소의 인덱스 j (i < j),(prices[j] < prices[i]) // answer[i] = j - i; int[] answer = new int[prices.length]; // 값이 떨어지는 순간을 연산하기 위한 ArrayDeque // for문을 사용해서 prices의 원소를 방문한다. // deque에 값이 존재하고 해당 값(tempIndex)이 가르키는 prices의 값과 현재 방문한 prices의 원소를 비교 // 현재 방문한 원소가 deque 가 가르키는 원소보다 작다면 // answer[tempIndex]의 현재 for문의 index - tempIndex 값을 저장 // deque에서 가장 최근 값 제거 // 다음 반복문 실행 // 현재 방문한 원소가 deque 가 가르키는 원소보다 크거나 같다면 // deque에 현재 for 문의 index값 추가 ArrayDeque<Integer> deque = new ArrayDeque<Integer>(); // deque.addLast(0); // for-each문을 사용하기 위한 index int index = 0; // deque에서 사용하는 임시 인덱스 int tempIndex = 0; // 향상된 for문으로 가격 확인 for(int price : prices) { while(true) { // deque이 비어있다면 현재 index 값 deque에 집어넣기 if(deque.isEmpty()) { deque.addLast(index); break; } // deque에 값이 있다면 현재 원소값과 deque에서 tempIndex가 가르키는 원소 비교 else { // 가장 최근에 있던 값을 가져오기(인덱스) tempIndex = deque.getLast(); // 현재 원소가 스택이 가르키는 원소보다 작다면 if(price < prices[tempIndex]) { // 값이 떨어지지 않은 기간을 answer 에 저장 answer[tempIndex] = index - tempIndex; // 최근 값 제거 deque.removeLast(); } // 현재 원소가 스택이 가르키는 원소보다 크다면 else { deque.addLast(index); break; } } } index++; } while(!deque.isEmpty()) { answer[deque.getLast()] = (answer.length - 1) - deque.removeLast(); } // System.out.println(deque.toString()); return answer; } }
Java
복사