728x90
๋ฌธ์
ํ์ด
dp[i][j] : i ~ j๊น์ง์ ์์ด์ด ํฐ๋ฆฐ๋๋กฌ์ธ์ง ์ ์ฅ
ex) dp[1][3] = True : 1 ~ 3๊น์ง์ ์์ด์ด ํฐ๋ฆฐ๋๋กฌ ์
arr ๋ฐฐ์ด์ ์ ์ฒด ์์ด ์ ์ฅ
1. ์์๊ฐ ํ๋์ธ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด ํฐ๋ฆฐ๋๋กฌ ์
dp[0][0], dp[1][1], ... dp[n][n] = True
2. arr[i] == arr[i+1]์ธ ๊ฒฝ์ฐ ํฐ๋ฆฐ๋๋กฌ ์ (๋ถ๋ถ ์์ด์ ๊ธธ์ด๊ฐ 2์ด๊ณ , ์์๊ฐ ๋์ผํ ๊ฒฝ์ฐ)
ex) 11, 22, 33, 44 ๋ ํฐ๋ฆฐ๋๋กฌ ์
3. a~b๊น์ง์ ์์ด์์ arr[a] == arr[b]์ด๊ณ ๊ทธ ์ฌ์ด์ ์์ด์ด ํฐ๋ฆฐ๋๋กฌ์ธ ๊ฒฝ์ฐ
์์๊ฐ 4๊ฐ์ธ ๊ฒฝ์ฐ, 5๊ฐ์ธ ๊ฒฝ์ฐ ... ๋ฐ๋ณตํ๋ฉด ๋๋ค.
์ฝ๋
import sys
input = sys.stdin.readline
n = int(input())
arr = list(map(int, input().split()))
dp = [[0] * n for _ in range(n)]
for i in range(n):
for j in range(n - i):
if arr[j] == arr[j + i]:
if i < 2:
dp[j][i + j] = 1
elif dp[j + 1][i + j - 1] == 1:
dp[j][i + j] = 1
r = int(input())
for _ in range(r):
a, b = map(int, input().split())
print(dp[a - 1][b - 1])
๋ง๋ฌด๋ฆฌ
ํฐ๋ฆฐ๋๋กฌ์ ์ด๋์ ๋ ๋ง์คํฐํ ๊ฒ ๊ฐ๋ค ใ ใ
728x90