白駿-2493:タワー[ジャワ]
2.各タワーにレーザエミッタ
4.タワーは全てレーザ信号受信装置
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine()); // 탑 개수
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
ArrayDeque<Integer> stack = new ArrayDeque<>(); // 탑 담을 스택
ArrayDeque<Integer> index = new ArrayDeque<>(); // 현재 탑의 인덱스 담을 스택
for (int i = 1; i <= N; i++) {
int n = Integer.parseInt(st.nextToken()); // 탑 높이 하나씩 읽기
if (stack.isEmpty()) { // 스택이 비어있다면
sb.append("0 "); // 레이저를 받을 곳이 없으니 0
stack.push(n); // 현재 탑 넣기
index.push(i); // 현재 탑의 인덱스 넣기
} else {// 스택이 비어있지 않다면
while (true) { //
if (stack.isEmpty()) { // 스택이 비어있다면 위와 같음
sb.append("0 ");
stack.push(n);
index.push(i);
break; // 멈추기
}
if (stack.peek() > n) { // 바로 앞의 탑이 현재 탑의 높이보다 높다면
sb.append(index.peek()).append(" ");// 그 인덱스 출력
stack.push(n); // 현재 탑 넣기
index.push(i); // 현재 탑의 인덱스 넣기
break;
} else { // 바로 앞의 탑이 현재 탑의 높이보다 낮다면 앞의 탑에 도달할 일이 없으니
stack.pop(); // 탑 없애기
index.pop(); // 그 탑의 인덱스도 없애기
}
}
}
// sb.append("0 ");
}
System.out.println(sb);
br.close();
}
}
Reference
この問題について(白駿-2493:タワー[ジャワ]), 我々は、より多くの情報をここで見つけました https://velog.io/@heoeunah/백준-2493-탑-자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol