ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
์์ด์ด ์ฃผ์ด์ง๊ณ , ์์ด ์ค ์ผ๋ถ๋ฅผ ์ ํํ ๋ ์ ํํ ๋ถ๋ถ์ด ํ๋ฌธ(Palindrome)์ธ์ง ์ฌ๋ถ๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ ๊น์ง๋ ์๊ฐ์ด ์ถฉ๋ถํ ์ฃผ์ด์ง๋ ํ๋ฌธ ๋ฌธ์ ๋ค์ ํ์ด์, ๋จ์ํ list๋ฅผ ์กฐ์ํ๋ ๋ฐฉ์์ผ๋ก ํ๋ฌธ์ ์ฐพ์๋ค. ํ์ง๋ง ์ด ๋ฌธ์ ๋ ๊ทธ๋ฐ ์์ผ๋ก ํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
๋ค๋ฅธ DP ๋ฌธ์ ๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ฉ๋ชจ์ด์ ์ด์ ์ ํตํด ๊ธธ์ด๊ฐ 1๋ถํฐ N๊น์ง์ ๋๋ ค๊ฐ๋ฉฐ ํ๋ฌธ์ธ์ง ์ฌ๋ถ๋ฅผ ๋ฆฌ์คํธ์ ๊ธฐ๋กํด๋๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ง์ ๋ ๋ฒ์์ ๋ฐ๋ผ ํ๋ฌธ์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค.
-
๊ธธ์ด๊ฐ 1์ธ ๊ฒฝ์ฐ
- ๋ฌด์กฐ๊ฑด ํ๋ฌธ์ด๋ค.
-
๊ธธ์ด๊ฐ 2์ธ ๊ฒฝ์ฐ
- ์์๊ณผ ๋์ด ๋์ผํ ๋ฌธ์์ด๋ฉด ํ๋ฌธ์ด๋ค.
-
๊ธธ์ด๊ฐ 3์ด์์ธ ๊ฒฝ์ฐ
- ์์๊ณผ ๋์ด ๊ฐ๊ณ dp[์์ + 1][๋ - 1]์ด ํ๋ฌธ์ด๋ฉด ํ๋ฌธ์ด๋ค.
์ฝ๋
from sys import stdin
if __name__ == "__main__":
n = int(stdin.readline())
seq = list(map(int, stdin.readline().split()))
m = int(stdin.readline())
sections = [list(map(int, stdin.readline().split())) for _ in range(m)]
dp = [[0] * n for _ in range(n)]
dp[0][0] = 1
for i in range(1, n):
# ๊ธธ์ด๊ฐ 1์ด๋ฉด ํ๋ฌธ.
dp[i][i] = 1
# ๊ธธ์ด 2์ ํ๋ฌธ ํ์ธ.
if seq[i - 1] == seq[i]:
dp[i - 1][i] = 1
for i in range(2, n):
for j in range(n - i):
# ๊ธธ์ด 3์ด์์ ํ๋ฌธ ํ์ธ.
if seq[j] == seq[i + j] and dp[j + 1][i + j - 1]:
dp[j][i + j] = 1
for section in sections:
s, e = section
print(dp[s - 1][e - 1])
์์ ์ฝ๋์ ๊ฐ์ด ๊ธธ์ด๊ฐ 1, 2์ธ ํ๋ฌธ์ ๋จผ์ ์ฒดํฌํ ํ, 2์ค ๋ฐ๋ณต๋ฌธ์ ํตํด ๊ธธ์ด 3 ์ด์์ ํ๋ฌธ์ ์ฒดํฌํ๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 1520 ๋ด๋ฆฌ๋ง๊ธธ (2) | 2020.09.01 |
---|---|
๋ฐฑ์ค: 2468 ์์ ์์ญ (0) | 2020.09.01 |
๋ฐฑ์ค: 15486 ํด์ฌ 2 (0) | 2020.08.29 |
๋ฐฑ์ค: 5557 1ํ๋ (0) | 2020.08.29 |
๋ฐฑ์ค: 12865 ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2020.08.28 |