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;
}
}
'to be 개발자' 카테고리의 다른 글
리액트란? 맥에 리액트 설치하기 (0) | 2020.10.07 |
---|---|
맥 리액트 설치 오류 해결 (웹팩 버전 안맞고, json webpack 지우라고 뜨는거) (0) | 2020.10.06 |
[알고리즘_자바] Two sum 배열 안에서 더해서 제시된 수를 만들 수 있는 두 수의 인덱스 구하기 (0) | 2020.09.19 |
[알고리즘_자바] MoveZero 배열 에서 0은 다 뒤로 보내고 나머지는 같은 순서로 앞에서부터 담기 (0) | 2020.09.18 |
[알고리즘_자바] MeetingRoom 미팅룸 사용 시간 겹치지 않는지 확인하기 (0) | 2020.09.17 |
댓글