코딩테스트

[leetcode] 739. Daily Temperatures

nayoon 2024. 6. 6. 15:16

문제

 

최초 풀이 -> 2중 for문, 배열의 크기가 최대 10^5라 분명 시간 제한으로 풀리지 않을 것을 알고 있었음..

최종 풀이 -> stack을 이용해서 풀이, 스택에는 배열의 인덱스를 삽입하고 배열 for문을 돌리면서 stack에 값이 들어있거나 temperatures[스택 peek] < temperatures[배열 인덱스] 일 경우 result[스택 peek] = 배열 인덱스 - 스택 peek 으로 답을 구함.

 

최초 풀이

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int max = 0;
        int size = temperatures.length;
        int[] cnt = new int[size];

        for(int i = 0; i < size; i++) {
            for(int j = i + 1; j < size; j++) {
                if (temperatures[i] < temperatures[j]) {
                    cnt[i] = j - i;
                    break;
                }
            }
        }

        return cnt;
    }
}

 

최종 풀이

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int max = 0;
        int size = temperatures.length;
        int[] cnt = new int[size];

        Stack<Integer> st = new Stack<>();

        for(int i = 0; i < size; i++) {
            while(!st.isEmpty() && temperatures[st.peek()] < temperatures[i]) {
                cnt[st.peek()] = i - st.pop();
            }
            st.push(i);
        }

        return cnt;
    }
}

'코딩테스트' 카테고리의 다른 글

[leetcode] 151. Reverse Words in String  (0) 2024.06.07
[leetcode] 345. Reverse Vowels  (1) 2024.06.07
[leetcode] 605. Can Place Flowers  (0) 2024.06.06
[leetcode] 208. Implement Trie(Prefix Tree)  (0) 2024.06.05
[leetcode] 136. Single Number  (0) 2024.06.05