🔺 문제
17298번: 오큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import java.util.*;
import java.io.*;
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[] seq = new int[n]; // 수열 배열
int[] ans = new int[n]; // 정답 배열
String[] str = br.readLine().split(" ");
for(int i = 0 ; i < n ; i++) {
seq[i] = Integer.parseInt(str[i]);
}
Stack<Integer> stack = new Stack<>();
stack.push(0); // 최초 값 push
for(int i = 1 ; i < n ; i++) {
// 스택이 비어있지 않고, 현재 수열 값이 top
while(!stack.isEmpty() && seq[stack.peek()] < seq[i]) {
ans[stack.pop()] = seq[i]; // 정답 배열에 오큰수를 현재 수열로 저장
}
stack.push(i); // 신규 데이터 push
}
while(!stack.isEmpty()) {
// 반복문을 다 돌고 나왔는데 스택이 비어있지 않다면, 빌 때까지
ans[stack.pop()] = -1; // 스택에 쌓인 idx에 -1을 넣음
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for(int i : ans) {
bw.write(i + " ");
}
bw.write("\n");
bw.flush();
}
}
|
cs |
✅ 해결 아이디어
✔ 스택
① 스택이 채워져있고, A[idx] > A[top] 인 경우 pop한 인덱스를 이용해 정답 수열에 오큰수 저장.
pop은 조건을 만족하는 동안 반복.
② 현재 인덱스를 스택에 push하고 다음 인덱스로 넘어가기
③ 1,2를 수열 길이만큼 반복 후, 현재 스택에 남아 있는 인덱스에 -1 저장
💥 유의사항
• N의 크기가 큰 관계로(1,000,000) 반복문은 꿈도 꾸지 말어라..
• 스택에 수열의 값이 아닌, 인덱스를 저장!
🔺 다른 풀이들
- 최고의 설명..
[백준] 17298번 : 오큰수 - JAVA [자바]
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 문제 Stack의 원리를
st-lab.tistory.com
- 과정 설명 굿..
[백준 17298번] 오큰수 (java)
백준 17298번 : 오큰수 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net res 배열에는 각 원소
lotuslee.tistory.com
💬 느낀 점
이 문제를 보고 스택을 이용할 생각을 하는 거 자체가 큰 미션 아닐까....
복습을 50번은 해야할 것 같다...ㅎ
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 8/1 |
(+ 8/1 2회독)
스택에 수열의 값이 아닌 인덱스 저장하기
(참고)
✔ Do it 알고리즘 코딩테스트 자바편
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 11279번: 최대 힙 (1) | 2023.06.13 |
---|---|
[백준/JAVA] 1927번: 최소 힙 (0) | 2023.06.13 |
[백준/JAVA] 10866번: 덱 (0) | 2023.06.13 |
[백준/JAVA] 2475번: 검증수 (0) | 2023.06.12 |
[백준/JAVA] 10250번: ACM 호텔 (0) | 2023.06.12 |