๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/11054)
< ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด >
๋ฌธ์ ํ์ด
์ข์ธก๋ถํฐ ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํ๊ณ , ์ฐ์ธก๋ถํฐ ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํ๋ค.
๊ทธ๋ฌ๋ฉด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด, ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด, ๋ฐ์ดํ ๋ ์์ด์ ๊ฐ์ฅ ๊ธด ๊ฐ์ ๊ตฌํ ์ ์๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class _11054_ { // ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n = Integer.parseInt(bf.readLine());
int a[] = new int[n];
st = new StringTokenizer(bf.readLine());
for (int i = 0; i < n; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
int dp1[] = new int[n];
int dp2[] = new int[n];
for (int i = 0; i < n; i++) {
dp1[i] = 1;
for (int j = 0; j < i; j++) {
if (a[j] < a[i]) {
dp1[i] = Math.max(dp1[i], dp1[j] + 1);
}
}
}
for (int i = n - 1; i >= 0; i--) {
dp2[i] = 1;
for (int j = n - 1; j > i; j--) {
if (a[i] > a[j]) {
dp2[i] = Math.max(dp2[i], dp2[j] + 1);
}
}
}
int result = 1;
for (int i = 0; i < n; i++) {
result = Math.max(result, dp1[i]);
result = Math.max(result, dp2[i]);
result = Math.max(result, dp1[i] + dp2[i] - 1);
}
System.out.println(result);
}
๋ณ์)
n : ์์ด ํฌ๊ธฐ
a : ์์ด
dp1, dp2 : ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด, ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด
result : ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ์์ด์ ๊ธธ์ด
์์ด ํฌ๊ธฐ๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค. ์์ด ํฌ๊ธฐ๋งํผ ์์ด์ ์ ๋ ฅ๋ฐ์ ๋ฐฐ์ด a์ ์ ์ฅํ๋ค. ์ข์ธก๋ถํฐ ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํด dp1์ ์ ์ฅํ๊ณ , ์ฐ์ธก๋ถํฐ ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํด dp2์ ์ ์ฅํ๋ค. dp1๊ณผ dp2๋ฅผ ํ์ํ๋ฉฐ ์ต๋๊ฐ์ ๊ตฌํ๋ค. ์ต์ข result๋ฅผ ์ถ๋ ฅํ๋ค.

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Baekjoon] 2294_๋์ 2 (0) | 2026.01.07 |
|---|---|
| [Baekjoon] 14442_๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2 (0) | 2026.01.05 |
| [Baekjoon] 25101_Robin Hood (0) | 2025.12.18 |
| [Baekjoon] 27589_Streets Ahead (0) | 2025.12.17 |
| [Baekjoon] 6235_Argus (0) | 2025.12.16 |