문제설명:
Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead.
매일의 온도 리스트 'temperatures' 를 입력받아 더 따뜻한 날씨가 되기까지 며칠 기다려야 하는지 출력.
Example 1:
- Input: temperatures = [73,74,75,71,69,72,76,73]
Output: [1,1,4,2,1,1,0,0]
Example 2:
- Input: temperatures = [30,40,50,60]
Output: [1,1,1,0]
Example 3:
- Input: temperatures = [30,60,90]
Output: [1,1,0]
문제풀이:
public int[] dailyTemperatures(int[] temperatures) {
int[] result = new int[temperatures.length];
Deque<Integer> stack = new ArrayDeque<>();
for (int i = 0; i < temperatures.length; i++) {
while (!stack.isEmpty() && temperatures[stack.peek()] < temperatures[i]) {
int last = stack.pop();
result[last] = i - last;
}
stack.push(i);
}
return result;
}
풀이설명:
- 정답이 될 int 배열은 temperatures와 같은 요소갯수를 갖는다. 따라서 int[] result = new int[temperatures.length]; 로 선언
- stack에 temperatures의 인덱스를 저장한다. Deque<Integer> stack = new ArrayDeque<>();
- stack에 값이 추가된 이후 부터 이전 온도와 현재 조회중인 온도의 차이를 비교하여 result 배열에 값을 추가한다.
- for문 안에 while문은 이전 온도와 현재 온도의 비교 판별 역할을 한다.
- 현재 조회중인 온도가 더 높은 경우 비교 대상이 되는 온도의 인덱스를 stack으로 부터 꺼내 result 배열에 값을 추가한다.
'Data Structures and Algorithms > Problems' 카테고리의 다른 글
LeetCode 1.Two Sum (0) | 2024.07.28 |
---|---|
LeetCode 스택과 큐 225. Implement Stack using Queues, 232. Implement Queue using Stacks (0) | 2024.07.26 |
LeetCode 316.Remove Duplicate Letters (0) | 2024.07.25 |
CodeUp 1163 : 당신의 사주를 봐 드립니다 2 (0) | 2022.06.15 |
문제 : 하루가 지난 글의 표기. (0) | 2022.04.27 |