๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/17298)
< ์คํฐ์ >
๋ฌธ์ ํ์ด & ์๊ฐ
์ฒ์์๋ ์ด์ค ํฌ๋ฌธ์ ์ฌ์ฉํด์ ๊ตฌํํ๋๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
stack์ ์ฌ์ฉํ์ฌ ์๊ฐ์ด๊ณผ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
ํ์ฌ ๊ฐ๊ณผ ๋ค์ ๊ฐ์ ๋น๊ตํ์ฌ ๋ค์ ๊ฐ์ด ํฌ๋ค๋ฉด ์คํฐ์ ์ด๋ฏ๋ก ๋ต์ ์ถ๋ ฅํ๊ณ ์คํฐ์๊ฐ ์๋๋ผ๋ฉด stack์ ๋ฃ์ด ํฐ ๊ฐ์ด ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
import java.util.StringTokenizer;
public class _17298_ { // ์คํฐ์
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
st = new StringTokenizer(bf.readLine());
Stack<Integer> stack = new Stack<>();
int arr[] = new int[n];
int result[] = new int[n];
for (int i = 0; i < n; i++) {
int num = Integer.parseInt(st.nextToken());
arr[i] = num;
result[i] = -1;
}
for (int i = 0; i < n - 1; i++) {
if (arr[i] < arr[i + 1]) {
result[i] = arr[i + 1];
if (!stack.isEmpty()) {
while (!stack.isEmpty()) {
if (arr[stack.peek()] < arr[i + 1]) {
int num = stack.pop();
result[num] = arr[i + 1];
}else {
break;
}
}
}
} else {
stack.add(i);
}
}
for (int i = 0; i < n; i++) {
bw.write(result[i] + " ");
}
bw.flush();
}
}
Main
- ์์ด A์ ํฌ๊ธฐ (n) ์ ๋ ฅ
- arr : ์์ด ์ ์ฅ
result: ์คํฐ์ ์ ์ฅ
- ์์ด์ ํ์ํ๋ฉฐ ํ์ฌ ๊ฐ๊ณผ ๋ค์ ๊ฐ์ ๋น๊ต -> ๋ค์ ๊ฐ์ด ํ์ฌ ๊ฐ ๋ณด๋ค ํฌ๋ค๋ฉด ์คํฐ์ ์ด๋ฏ๋ก result ๋ฐฐ์ด์ ์ ์ฅ, stack์ ๊ฐ์ด ์๋์ง ํ์ธ ํ stack์ ์๋ ๊ฐ์ด ๋ค์ ๊ฐ๋ณด๋ค ์๋ค๋ฉด stack์ ์๋ ๊ฐ์ ์คํฐ์๋ฅผ ์ฐพ์ ๊ฒ์ด๋ฏ๋ก ์คํฐ์ ์ ์ฅ But ์คํฐ์๊ฐ ์๋๋ผ๋ฉด ์คํฐ์๋ฅผ ์ฐพ๊ธฐ ์ํด stack์ ๊ฐ์ ์ ์ฅ
- result ๋ฐฐ์ด ์ถ๋ ฅ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1789_์๋ค์ ํฉ (0) | 2023.06.28 |
---|---|
[Baekjoon] 17299_์ค๋ฑํฐ์ (0) | 2023.06.28 |
[Baekjoon] 3425_๊ณ ์คํ (0) | 2023.06.27 |
[Baekjoon] 14267_ํ์ฌ ๋ฌธํ 1 (0) | 2023.06.27 |
[Baekjoon] 16562_์น๊ตฌ๋น (0) | 2023.06.27 |