[๋ฐฑ์ค] ๐ฅ 17298 ์คํฐ์
๐ ๋์ด๋
๐ฅ Gold 4
๐ ๋ฌธ์
https://www.acmicpc.net/problem/17298
๐ ํ์ด
์ด ๋ฌธ์ ๋ฅผ ๋ณด์๋ง์๋ ์๊ฐ์ ๋ฐ๋ก DP
๋ฅผ ์์ฉํ์ฌ ํ์ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด์๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ๋ก ๊ฐ๋ฉด์ ์ด์ ์ ๊ฐ์ฅ ํฐ๊ฐ์ด ์๋์ง ๋น๊ต๋ฅผ ํ๋ ค๋ฉด o(n^2/2)์ ์๊ฐ๋ณต์ก๋๊ฐ ๋ฐ์ํ๋ฏ๋ก, ๋๋ฌด๋๋ ๊ธด ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ์ด์ ์ ๊ฐ์ฅ ํฐ ๊ฐ์ด ์ด๋ค๊ฑด์ง๋ง ์ ์ฅ์ ํด๋์ผ๋ฉด, ์ต์ ํด๊ฐ ๋์ค์ง๋ฅผ ์๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ์ฌ ์ฃผ์๊ฐ์ ์ ์ฅํ๋ dp
๋ฐฐ์ด์ ๋ง๋ค์ด์, ๊ทธ ์์๋ ๊ทธ๊ฒ๋ณด๋ค ํฐ ์ค๋ฅธ์ชฝ์ ์๋ ์ซ์์ ์ฃผ์๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ํ์๋ค.
๐ Code
package BOJ.DS;
import java.io.*;
import java.util.*;
public class N17298 {
static int[] nums;
static int[] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
nums = new int[N];
dp = new int[N];
for (int i = 0; i < N; i++) {
nums[i] = Integer.parseInt(st.nextToken());
}
FindNGE(N);
ShowAll(N);
}
static void FindNGE(int N) {
dp[N - 1] = -1;
for (int i = N - 2; i >= 0; i--) {
// ์ฃผ์๊ฐ
dp[i] = i + 1;
// ์ฃผ์๊ฐ์ด -1์ด ์๋๊ณ , ๋ ํฌ๋ฉด
while (nums[i] >= nums[dp[i]]) {
if (dp[dp[i]] != -1) {
dp[i] = dp[dp[i]];
} else{
dp[i] = -1;
break;
}
}
}
}
static void ShowAll(int N) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
if (dp[i] != -1) {
sb.append(nums[dp[i]] + " ");
} else {
sb.append(-1 +" ");
}
}
System.out.println(sb);
}
}
package (์ด๋ฆ); ๋ฅผ ๋๊ณ , class ์ด๋ฆ์ Main
์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
๊ฐ์ธ ๊ณต๋ถ ๊ธฐ๋ก์ฉ ๋ธ๋ก๊ทธ์
๋๋ค.
ํ๋ฆฌ๊ฑฐ๋ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ์ ๋ณดํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.๐