github.com/taemin-kwon93 Github 보러가기 ->

Data Structures and Algorithms/Problems

LeetCode 739.Daily Temperatures

태민Kwon 2024. 7. 26. 14:23

문제설명:

 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;
}

 

풀이설명:

  1. 정답이 될 int 배열은 temperatures와 같은 요소갯수를 갖는다. 따라서 int[] result = new int[temperatures.length]; 로 선언
  2. stack에 temperatures의 인덱스를 저장한다. Deque<Integer> stack = new ArrayDeque<>();
  3. stack에 값이 추가된 이후 부터 이전 온도와 현재 조회중인 온도의 차이를 비교하여 result 배열에 값을 추가한다.
    1. for문 안에 while문은 이전 온도와 현재 온도의 비교 판별 역할을 한다.
    2. 현재 조회중인 온도가 더 높은 경우 비교 대상이 되는 온도의 인덱스를 stack으로 부터 꺼내 result 배열에 값을 추가한다.