728x90
백준 17298 오큰수
문제
크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다.
예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다.
입력
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
출력
총 N개의 수 NGE(1), NGE(2), ..., NGE(N)을 공백으로 구분해 출력한다.
제출
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
int[] A = new int[n];
int[] ans = new int[n];
String[] str = bf.readLine().split(" ");
for (int i = 0; i < n; i++) {
A[i] = Integer.parseInt(str[i]);
}
Stack<Integer> myStack = new Stack<>();
myStack.push(0);
for (int i = 1; i < n; i ++) {
while(!myStack.isEmpty() && A[myStack.peek()] < A[i]) {
ans[myStack.pop()] = A[i];
}
myStack.push(i);
}
while (!myStack.empty()) {
ans[myStack.pop()] = -1;
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (int i = 0; i < n; i++) {
bw.write(ans[i] + " ");
}
bw.write("\n");
bw.flush();
}
}
예제
4
3 5 2 7
4
9 5 4 8
결과
728x90
'JAVA > 백준' 카테고리의 다른 글
[Java] 백준 11286 절댓값 힙 - 스택과 큐(4) (0) | 2022.10.27 |
---|---|
[Java] 백준 2164 카드2 - 스택과 큐(3) (0) | 2022.10.26 |
[Java] 백준 1874 스택 수열 - 스택과 큐(1) (0) | 2022.10.24 |
[Java] 백준 11003 최솟값 찾기 - 슬라이딩 윈도우(2) (0) | 2022.10.23 |
[Java] 백준 12891 DNA 비밀번호 - 슬라이딩 윈도우(1) (0) | 2022.10.22 |
댓글