코딩테스트
백준 - 2493번 탑
NellKiM
2025. 4. 9. 22:57
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main_2493 {
public static void main(String[] args) throws Exception{
//입력객체 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//출력데이터 모으기
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine()); //탑의 수
StringTokenizer tokens = new StringTokenizer(br.readLine());//한줄에 공백을 구분자로 하는 두개 이상의 데이터
//tokens = ["6" "9" "5" "7" "4"] : 탑의 높이 정보
Stack<Tower> stack = new Stack<>(); //스택에는 탑의 [번호와 높이] 정보를 저장
// int [] tower = new int[2];// 0번지를 번호, 1번지를 높이로 약속하겠다
// Stack<int[]> stack2 = new Stack<>();
for(int no=1; no<=N; no++) {//탑의 수만큼 반복 : 번호는 1번부터~~
int towerHeight = Integer.parseInt(tokens.nextToken()); //높이 비교
while(!stack.isEmpty()) {// 스택에 비교할 값이 존재한다면
if( stack.peek().height > towerHeight ) { //기존 탑의 높이와 새로입력된 탑의 높이 비교
// old(왼쪽 탑) new(오른쪽 탑)
sb.append(stack.peek().no +" ");
break;
}
stack.pop();//맨 위의 탑 정보 삭제
}
if(stack.isEmpty()) sb.append("0 ");
//마지막 타워를 스택에 추가
stack.push(new Tower(no, towerHeight));
}
System.out.println(sb.toString());
br.close();
}//main
static class Tower{
int no;
int height;
public Tower(int no, int height) {
this.no = no;
this.height = height;
}
}//class Tower
}