https://www.acmicpc.net/problem/17298
17298번: 오큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
사실 얼마 전에 풀었던 탑 문제와 개념적으로 아예 같은 문제라 금방 풀었다.
100만개를 전부 비교하면 시간복잡도 N^2 이라 시간이 부족할 것이고 스택을 사용해 비교할 필요가 없는 부분들은 제거하면서 확인했다.
https://godhkekf24.tistory.com/93
[백준 - JAVA] 2493번 : 탑
https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사
godhkekf24.tistory.com
import java.io.*;
import java.util.*;
public class Q_17298 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static StringTokenizer st;
static Stack<Integer> stack = new Stack<>();
static int[] arr, result;
public static void main(String[] args) throws Exception {
int N = Integer.parseInt(br.readLine());
arr = new int[N];
result = new int[N];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
for(int i = arr.length - 1; i >= 0; i--) {
result[i] = check(arr[i]);
}
for(int i = 0; i < result.length; i++) {
bw.write(result[i] + " ");
}
bw.close();
}
private static int check(int num) {
//본인보다 큰 것이 나올 때까지 꺼내서 확인
while(!stack.isEmpty()) {
int next = stack.peek();
if(next <= num) {
stack.pop();
continue;
}
//큰 것이 나왔을 때
stack.push(num);
return next;
}
// 전부 비었을 때
stack.push(num);
return -1;
}
}
'코딩테스트연습 > 백준' 카테고리의 다른 글
[백준 - JAVA] 2468번 : 안전 영역 (0) | 2023.02.13 |
---|---|
[백준 - JAVA] 1926번 : 그림 (0) | 2023.02.12 |
[백준 - JAVA] 1021번 : 회전하는 큐 (0) | 2023.02.08 |
[백준 - JAVA] 2493번 : 탑 (0) | 2023.02.07 |
[백준 - JAVA] 18115번 : 카드 놓기 (0) | 2023.02.06 |