문제 설명
- 정수 배열
temperatures
가 주어집니다. 이 배열은 매일의 기온을 나타냅니다. - 각 날짜
i
에 대해, 그 날보다 더 따뜻한 날이 오기까지 며칠을 기다려야 하는지를 계산하여 배열answer
에 담아 반환하세요. - 만약 더 따뜻한 날이 없다면,
answer[i] = 0
으로 설정합니다.
예시 1
- 입력: temperatures = [73, 74, 75, 71, 69, 72, 76, 73]
- 출력: [1, 1, 4, 2, 1, 1, 0, 0]
예시 2
- 입력: temperatures = [30, 40, 50, 60]
- 출력: [1, 1, 1, 0]
예시 3
- 입력: temperatures = [30, 60, 90]
- 출력: [1, 1, 0]
문제 풀이
- 각 i번째 날의 온도보다 더 따뜻한 날이 앞으로 며칠 뒤인지 계산해 반환. 없다면 0으로 저장한다.
- 인덱스를 스택에 저장하고, 스택에는 온도가 감소하는 순서로 저장됨.
- 현재 온도가 스택 top에 해당하는 인덱스의 온도보다 높다면, 따뜻한 날을 찾은 것이므로
answer[top] = 현재 인덱스 - top
계산 후 pop
import java.util.*;
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
Deque<Integer> stack =new ArrayDeque<>();
int [] answer=new int[temperatures.length];
for(int i=0;i<temperatures.length;i++){
int temperature=temperatures[i];
while(
!stack.isEmpty()&&
temperature>temperatures[stack.peek()] // 온도가 높아졌다면
){
int prevIndex=stack.pop(); // pop 하고
answer[prevIndex]=i-prevIndex; // 해당 index에 저장
}
stack.push(i);
}
return answer;
}
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[ 프로그래머스 ] #42888 : 오픈채팅방 - JAVA (1) | 2025.04.28 |
---|---|
[ 프로그래머스 ] #43162 : 네트워크 - JAVA (0) | 2025.04.25 |
[ 프로그래머스 ] #131127 : 할인 행사 - JAVA (0) | 2025.04.22 |
[ 프로그래머스 ] #42576 : 완주하지 못한 선수 - JAVA (0) | 2025.04.21 |
[ etc ] #18 : 두 개의 수로 특정값 만들기 - JAVA (0) | 2025.04.21 |