
inputanswerinput 배열의 인덱스 0부터 n-1(input의 길이)까지 반복문에 넣고 비교stack에 가장 마지막으로 들어간 값과, input 배열의 수를 비교하여, 오른쪽의 수가 큰지 아닌지 확인한다.stack을 확인하여 작은 수들의 오큰수를 대입한다.stack에 pushstack이 비어있으면, stack에 넣는다.BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] input = new int[n];
int[] answer = new int[n];
String arr = br.readLine();
StringTokenizer st = new StringTokenizer(arr);
for (int i = 0; i < n; i++) {
input[i] = Integer.parseInt(st.nextToken());
answer[i] = -1;
}
input생성, 오큰수를 저장하기 위한 배열 answer생성input에는 수열을 저장answer에는 -1로 초기화Stack<Integer> stack = new Stack<>();
for (int i = 0; i < n; i++) {
while (!stack.isEmpty() && input[stack.peek()] < input[i]) {
answer[stack.pop()] = input[i];
}
stack.push(i);
}
input을 순회하며 현 index와 stack의 peek값 비교stack에 해당 index를 pushstack의 peek값을 index로 가지는 input의 값보다 현재 비교중인 i를 index로 가지는 input의 값이 더 크기 때문에,stack의 peek값의 오큰수(answer[stack.peek()])는 input[i]가 된다.stack에서 pop해야 하므로, answer[stack.pop()]을 사용하여 대입하는 것이 코드가 간결해진다.while문을 사용하여, stack의 peek값이 input[i]보다 작을 때까지, stack의 peek값을 input[i]로 대입한다.stack의 peek값을 index로 가지는 input의 값보다 큰 값을 찾아야 하므로, stack에 현재 index를 push즉, 2-2를 반복하며 stack의 peek값을 확인하며 pop하다가도, peek값이 index값보다 크다면, 반복 중지하고 stack에 현재 index값 push
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append(answer[i]).append(" ");
}
System.out.println의 경우 시간초과 발생StringBuilder 사용 추천import java.io.*;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] input = new int[n];
int[] answer = new int[n];
String arr = br.readLine();
StringTokenizer st = new StringTokenizer(arr);
for (int i = 0; i < n; i++) {
input[i] = Integer.parseInt(st.nextToken());
answer[i] = -1;
}
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < n; i++) {
while (!stack.isEmpty() && input[stack.peek()] < input[i]) {
answer[stack.pop()] = input[i];
}
stack.push(i);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append(answer[i]).append(" ");
}
System.out.println(sb);
}
}