풀이
- 나는 스택을 활용하기때문에 뒤에서부터 찾아야한다는 생각이 강했다 ... 다른 사람의 풀이를 보았더니 역시 알고리즘 고수들이 많다... 열심히 하자
- 먼저 스택에 현재 (탑의 번호, 높이) 를 저장해준다.
- 그리고 입력받은 현재 탑의 높이보다 스택에 큰 값이 있다면 그때의 탑의 높이를 StringBuilder에 이어 붙혔다. 진짜 대단한 사람들이 많은 것 같다😭
- 그리고 int[]{i, top} -> 배열을 이렇게 넣을 수 있다는거 꼭 기억하자
package problem_solving.stack;
import java.util.Scanner;
import java.util.Stack;
public class BaekJoon_2493 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Stack<int[]> st = new Stack<>();
int n = Integer.parseInt(sc.next());
StringBuilder sb = new StringBuilder();
for(int i = 1 ; i <= n ; i++){
int top = Integer.parseInt(sc.next());
while(!st.isEmpty()) {
if( st.peek()[1] >= top ) {
sb.append(st.peek()[0]+ " ");
break;
}
st.pop();
}
if ( st.isEmpty()) {
sb.append("0"+ " ");
}
st.push(new int[] {i,top});
}
System.out.println(sb.toString());
}
}