본문 바로가기
to be 개발자

[알고리즘_자바] Daily Temperature 배열 뒤에 나오는 더 큰 오브젝트와의 거리 구하는 법 (Stack 활용법)

by 아셀acell 2020. 9. 30.
반응형

 

import java.util.Stack;

 

public class test0930 {

 

public static void main(String[] args) {

 

문제 

 

//Daily Temperature

//각 온도보다 높아지는 날은 몇일 뒤인가 

int[] nums = {73,74,75,71,69,72,76,73}; 

int[] res = dt(nums);

 

for(int i=0;i<res.length;i++) {

System.out.print(res[i]+" ");

}

 

}

 

풀이 

 

public static int[] dt(int[] temper) {

     //1 담을 그릇 

Stack<Integer> stack = new Stack<>();        //Stack은 import

int[] result = new int[temper.length];

 

     //2 빼내기 

for(int i=0;i<temper.length;i++) {

     //!stack.isEmpty() 스택이 비어있지 않은 동안. 비어있는 순간 while은 끝

     //stack.peek() 스택의 가장 끝 배열 오브젝트 등장 

     //여기서는 일단 stack.push(i)로 스택에 일단 해당 배열 번호(012)를 넣어놨으므로 

     //오브젝트 = 번호 

while(!stack.isEmpty()&&temper[stack.peek()]<temper[i]) {

     //result[0] = 1-0

     //stack.pop() 스택의 가장 끝 오브젝트를 반환하고 삭제  

int index = stack.pop();

result[index] = i-index;

}

     //이 while문을 통해서 74까지는 문제 없이 리저트에 1,1,저장 되지만 

     //75는 2 스택에만 저장되고 넘어가고 

     //71은 3

     //69는 4

     //근데 72가 오면서 (temper[i])

     //69는 result[4]에 5-4=1 저장되고

     //71은 result[3]에 5-3=2 저장되고 

     //75만 남은 채로 76(temper[i]) 오고 

     //75는 result[2]에 6-2=4 저장됨

     //이후 72도 76덕에 1 저장되고 

     //76,73은 해당없으니까 result에 아무것도 저장 안돼서 기본값 0으로 나옴 

     //(배열 자리만들어주고 아무것도 안넣으면 0)

 

     //stack.push(i) 스택에 뒤로 i를 차곡차곡 쌓음 

stack.push(i);

}

 

return result;

}

 

}

 

728x90
반응형
LIST

댓글