공부/알고리즘

LIFO - java

확두뇌 2023. 12. 2. 18:23

문제: 매일의 온도를 나타내는 int형 배열 temperatures가 주어진다. answer배열의 원소 answer[i]는 i번째 날의 온도보다 더 따뜻해지기까지 며칠을 기다려야하는지 나타낸다. 만약 더 따뜻해지는 날이 없다면 answer[i] == 0이다.

answer 배열을 반환하는 함수를 구현하시오.

 

제약조건

1<=temparatures.length <= 10^5

30 <= temparatures[i] <= 100

 

import java.util.Arrays;
import java.util.Stack;

public class LIFO {
	
	
	public static int[] dailyTemperatures(int[] temperatures) {
		int[] ans = new int[temperatures.length];
		Stack<Integer[]> stack = new Stack<>();
		
		for(int i=0; i<temperatures.length; i++) {
			Integer[] day = {temperatures[i],i};
			while(stack.size()!= 0 && stack.peek()[0] < temperatures[i]) {
				ans[stack.peek()[1]] = i-stack.peek()[1];
				stack.pop();
			}
			stack.push(day);
		}
		
		return ans;
	}

	public static void main(String[] args){
		int[] tem1 = {73, 74, 75, 71, 69, 72, 76, 73};
		
		System.out.println(Arrays.toString(dailyTemperatures(tem1)));
	}

}