
https://www.acmicpc.net/problem/10942
๐ ์๋ฐ๋ก ํธ๋ ํ ๋ฆฐ๋๋กฌ? ๋ฌธ์ ํ์ด (๋ฐฑ์ค 10942)
๐ ๋ฌธ์ ๊ฐ์
- ์์ด์ด ์ฃผ์ด์ก์ ๋, ํน์ ๊ตฌ๊ฐ์ด ํ ๋ฆฐ๋๋กฌ(ํ๋ฌธ)์ธ์ง ๋น ๋ฅด๊ฒ ํ๋ณํด์ผ ํ๋ ๋ฌธ์ ์ ๋๋ค.
- ์ง์๊ฐ ์ต๋ 100๋ง ๋ฒ๊น์ง ์ฃผ์ด์ง๋ฏ๋ก, ๋จ์ํ ๋น๊ต๋ก๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํฉ๋๋ค.
๐ก ์์ ์ ๋ ฅ
7
1 2 1 3 1 2 1
4
1 3
2 5
3 3
5 7
์์ ์ถ๋ ฅ
1
0
1
1
๐ ์๊ณ ๋ฆฌ์ฆ ์ ๊ทผ ๋ฐฉ์
์ด ๋ฌธ์ ๋ DP(Dynamic Programming) ์ ํ์ฉํด
๋ชจ๋ ๊ฐ๋ฅํ ๊ตฌ๊ฐ์ ๋ํด ํ ๋ฆฐ๋๋กฌ ์ฌ๋ถ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํ ๋ค,
์ง์์ ๋ํด ๋น ๋ฅด๊ฒ ์๋ตํ๋ ๊ตฌ์กฐ๋ก ํ ์ ์์ต๋๋ค.
โ ํต์ฌ ์์ด๋์ด
- isAns[s][e] = true if arr[s] == arr[e] and isAns[s+1][e-1] == true
- 1๊ธ์, 2๊ธ์์ง๋ฆฌ ๊ตฌ๊ฐ์ ์ง์ ๋น๊ต๋ก ์ด๊ธฐํ
- ์ดํ ๊ธธ์ด 3 ์ด์์ธ ๊ตฌ๊ฐ์ ์ ํ์์ผ๋ก ์ฑ์๋๊ฐ
๐งพ ์ฝ๋ ํด์ค
๐ฏ ์ ๋ ฅ ๋ฐ ๋ฐฐ์ด ์ด๊ธฐํ
int N = Integer.parseInt(br.readLine());
int[] arr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
boolean[][] isAns = new boolean[N][N];
โ๏ธ 1๊ธ์, 2๊ธ์ ๊ตฌ๊ฐ ์ด๊ธฐํ
for (int i = 0 ; i < N ; i++) {
isAns[i][i] = true;
if(i != N-1 && arr[i] == arr[i+1]) isAns[i][i+1] = true;
}
- ์๊ธฐ ์์ ํ๋๋ ํญ์ ํ ๋ฆฐ๋๋กฌ
- ๋ฐ๋ก ์ ์ซ์๊ฐ ๊ฐ๋ค๋ฉด ๊ธธ์ด 2์ ํ ๋ฆฐ๋๋กฌ
๐ ๊ธธ์ด 3 ์ด์ ๊ตฌ๊ฐ ์ฑ์ฐ๊ธฐ (DP)
for (int len = 2; len < N; len++) {
for (int s = 0; s + len < N; s++) {
int e = s + len;
if (arr[s] == arr[e] && isAns[s + 1][e - 1]) {
isAns[s][e] = true;
}
}
}
- ์ ์ ๊ธธ์ด์ง๋ ๊ตฌ๊ฐ์ ํ์ธํ๋ฉฐ,
- ์ ๋์ด ๊ฐ๊ณ , ์์ชฝ์ด ํ ๋ฆฐ๋๋กฌ์ด๋ฉด ์ ์ฒด๋ ํ ๋ฆฐ๋๋กฌ
๐ฅ ์ง์ ์ฒ๋ฆฌ
int M = Integer.parseInt(br.readLine());
for(int i = 0; i < M; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken())-1;
int b = Integer.parseInt(st.nextToken())-1;
sb.append(isAns[a][b]?1:0).append("\n");
}
- ๋ฏธ๋ฆฌ ๊ณ์ฐํ isAns๋ฅผ ์ด์ฉํ์ฌ O(1) ์๊ฐ์ผ๋ก ์ง์์ ๋ต๋ณ
โ ํต์ฌ ํฌ์ธํธ ์์ฝ
ํฌ์ธํธ | ์ค๋ช |
DP ์ฌ์ฉ | ์ค๋ณต ์ฐ์ฐ ์์ด ๋ชจ๋ ๊ตฌ๊ฐ์ ๋ํ ํ๋ฌธ ์ฌ๋ถ ์ฌ์ ๊ณ์ฐ |
2์ฐจ์ ๋ฐฐ์ด | isAns[start][end]๋ก ๊ตฌ๊ฐ ๊ด๋ฆฌ |
O(Nยฒ) ์ฌ์ ์ฒ๋ฆฌ + O(1) ์ง์ | ๋งค์ฐ ํจ์จ์ ์ธ ์๊ฐ๋ณต์ก๋ ๊ตฌ์ฑ |
์คํ์ ์ฃผ์ | ์ ๋ ฅ์ 1-indexed โ ๋ด๋ถ ๋ฐฐ์ด์ 0-indexed |
๐ฏ ๊ฒฐ๋ก : ๊ตฌ๊ฐ ํ๋ฌธ ํ๋ณ์ ๋ฏธ๋ฆฌ ์ค๋นํ์
์ด ๋ฌธ์ ๋ ๊ตฌ๊ฐ์ ๋ํ ๋ฐ๋ณต ์ง์๊ฐ ๋ง์ ๊ฒฝ์ฐ,
์ ๋ต์ ๋ฏธ๋ฆฌ ๊ณ์ฐํด๋๋ ์ ๋ต(DP + ๋ฉ๋ชจ์ด์ ์ด์ )์ด ๋งค์ฐ ๊ฐ๋ ฅํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค.
'Algorithm & Data Structures > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
b1068. ํธ๋ฆฌ (0) | 2025.05.31 |
---|---|
b9328. ์ด์ (0) | 2025.05.21 |
b1655. ๊ฐ์ด๋ฐ๋ฅผ ๋งํด์ (0) | 2025.05.19 |
b1774. ์ฐ์ฃผ์ ๊ณผ์ ๊ต๊ฐ (0) | 2025.05.14 |
b4386. ๋ณ์๋ฆฌ ๋ง๋ค๊ธฐ (0) | 2025.05.13 |