[ LeetCode ] #739 : Daily Temperatures - JAVA

🔗 Daily Temperatures

문제 설명

  • 정수 배열 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;
    }
}

 

 

image