https://www.acmicpc.net/problem/10942
๋ฐฐ์ด์์ i๋ถํฐ j๊น์ง๊ฐ ํฐ๋ฆฐ๋๋กฌ์ธ์ง ์๋์ง ์ฌ๋ฌ ๋ฒ ํ์ธํ๋ ๋ฌธ์ .
์์ด๋์ด
1. dp
- ๊ฐ๋จํ๊ฒ ๋ฆฌ์คํธ ์ฌ๋ผ์ด์ฑ์ผ๋ก๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋์ dp๋ฅผ ์ฌ์ฉ
- i๋ฒ์งธ๋ถํฐ j๊น์ง์ ์๊ฐ ํฐ๋ฆฐ๋๋กฌ์ธ์ง ํ์ธํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ด์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
2. ์ ํ์
- ๋จผ์ ๋ฌด์กฐ๊ฑด ํฐ๋ฆฐ๋๋กฌ์ธ i๋ถํฐ i๊น์ง์ ์๋ 1๋ก ์ ์ฅํด๋๋ค.
- ๊ทธ๋ฆฌ๊ณ i๋ฒ์งธ ์์ i + 1๋ฒ์งธ ์๊ฐ ๊ฐ์ผ๋ฉด ํฐ๋ฆฐ๋๋กฌ์ด๋๊น ์ด๊ฒ๋ 1๋ก ์ ์ฅ.
- ์ ํ์์ ์ด๋ฏธ ํฐ๋ฆฐ๋๋กฌ์ธ ์ ์ ์์ ์ค๋ ๋ ์๊ฐ ๊ฐ๋ค๋ฉด ๊ทธ๊ฒ๋ ํฐ๋ฆฐ๋๋กฌ์ด๋ค.
- ์๋ฅผ ๋ค์ด 121์ด๋ผ๋ ํฐ๋ฆฐ๋๋กฌ ์์์ ์ ์์ 3 ์ด ๋ถ๋ ๋ค๋ฉด 31213 ๋ ํฐ๋ฆฐ๋๋กฌ์ด๋ค.
์ ์ฒด ์ฝ๋
import sys
N = int(input())
num_arr = [int(x) for x in input().split()]
M = int(input())
DP = [[0] * (N) for _ in range(N)] # DP[i][j] i๋ถํฐ j๊น์ง
for i in range(N): # len == 1
DP[i][i] = 1
for i in range(N - 1): # len == 2
if num_arr[i] == num_arr[i + 1]:
DP[i][i + 1] = 1
for num_len in range(2, N): # len >= 3
for start in range(N - num_len):
end = start + num_len
if num_arr[start] == num_arr[end]:
if DP[start + 1][end - 1] == 1:
DP[start][end] = 1
for _ in range(M):
S, E = map(int, sys.stdin.readline().split())
print(DP[S - 1][E - 1])
์ฝ๋ ์ค๋ช
for i in range(N): # len == 1
DP[i][i] = 1
for i in range(N - 1): # len == 2
if num_arr[i] == num_arr[i + 1]:
DP[i][i + 1] = 1
์์์ ์ค๋ช ํ ์์ ๊ธธ์ด๊ฐ 1์ด๋ 2์ผ ๋ ํฐ๋ฆฐ๋๋กฌ ์ธ์ง ํ์ธํ๋ ์ฝ๋๋ค.
for num_len in range(2, N): # len >= 3
for start in range(N - num_len):
end = start + num_len
if num_arr[start] == num_arr[end]:
if DP[start + 1][end - 1] == 1:
DP[start][end] = 1
์ดํ ์์ ๊ธธ์ด๊ฐ 3 ์ด์์ธ ๊ฒฝ์ฐ๋ถํฐ ํฐ๋ฆฐ๋๋กฌ์ธ์ง ํ์ธํด์ฃผ๋ฉด ๋๋ค.
๋ง์ฝ DP[start + 1][end - 1] == 1(start + 1 ๋ฒ์งธ๋ถํฐ end - 1๊น์ง์ ์๊ฐ ํฐ๋ฆฐ๋๋กฌ)์ด๊ณ
start๋ฒ์งธ ์์ end๋ฒ์งธ ์๊ฐ ๊ฐ๋ค๋ฉด DP [start][end] = 1์ด๋ค.
์ดํ ์ด์ค for๋ฌธ์ ์ง๋๋ฐ ์ฃผ์ํ ์ ์ด ์๋ค.
๋ง์ฝ ์ด์ค for๋ฌธ์ ๊ทธ๋ฅ ํํ ์์ฑํ๋ฏ 0 0, 0 1... ์ด๋ฐ ์์ผ๋ก ์์ฑํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์๋ฅผ ๋ค์ด DP[2][6]์ ๊ฐ์ ์ ํ๋ ค๋ฉด DP[3][5]์ ๊ฐ์ ์์์ผ ํ๋ค.
ํ์ง๋ง ์ผ๋ฐ์ ์ธ ์ด์ค for๋ฌธ์์๋ ์์ง DP[3][5]์ ๊ฐ์ด ์ ํด์ ธ ์์ง ์์ผ๋ฏ๋ก ์ ๋๋ก ๊ฐ์ด ์ ๋ ฅ๋์ง ๋ชปํ๋ค.
์ด ๊ฒฝ์ฐ๋ฅผ ํผํ๊ธฐ ์ํด์ ์ด์ค for๋ฌธ์์ ์ฒซ ๋ฒ์งธ for๋ฌธ์ ์์์ (start)์ด ์๋ ์์ ๊ธธ์ด(num_len)๋ก ์ค์ ํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ์์ฑํ๋ฉด ์ด๋ฏธ ์ด์ ์ ์์ ๊ธธ์ด๊ฐ 1๊ณผ 2 ์ธ ๊ฒ์ ์ด๋ฏธ ํ์ธํ์ผ๋ฏ๋ก ๋ฐ๋ก ์์ ๊ธธ์ด๊ฐ 3์ธ ๊ฒ๋ถํฐ ์ฐจ๋ก๋๋ก ์ฑ์ ๋๊ฐ๋ฉด ๋๋ค.
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 14938 ์๊ฐ๊ทธ๋ผ์ด๋ (python ํ์ด์ฌ) (0) | 2022.09.10 |
---|---|
[๋ฐฑ์ค]11660 ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (python ํ์ด์ฌ) (0) | 2022.08.19 |
[๋ฐฑ์ค] 1647 ๋์ ๋ถํ ๊ณํ (python ํ์ด์ฌ) (0) | 2022.08.01 |
[๋ฐฑ์ค] 1644 ์์์ ์ฐ์ํฉ (python ํ์ด์ฌ) (0) | 2022.07.31 |
[๋ฐฑ์ค] 9466 ํ ํ๋ก์ ํธ (python ํ์ด์ฌ) (0) | 2022.07.31 |