-문제: https://www.acmicpc.net/problem/10942
문자의 시작과 끝이 같은지 계속 비교해가면서 모두 같으면 팰린드롬이다.
각자하면 시간이 오래 걸리므로 2차원 행렬을 만들어서 행은 시작점, 열은 끝점으로 지정한다음
길이별로 팰린드롬 여부를 입력한다.
여기서도 문자 길이가 1인지,2인지 3 이상인지에 따라 팰린드롬을 확인하는 여부가 다르기 때문에
경우에 대해 잘 생각해야한다.

-정답풀이:
import sys
input=sys.stdin.readline
n=int(input())
data=list(map(int,input().split()))
m=int(input())
dp=[[0 for _ in range(n)] for _ in range(n)]
for num_len in range(n): #문자열의 길이
for start in range(n - num_len): #문자 시작 위치
end= start + num_len
#문자 길이가 1임 -> 무조건 팰린드롬
if start == end:
dp[start][end]=1
#문자 길이가 2이상이고, 끝점이 같은 경우
elif data[start]==data[end]:
#문자 길이가 2인 경우
if start+1 == end:
dp[start][end] = 1
#양 끝 숫자가 같고, 안에 숫자도 같은 경우
elif dp[start+1][end-1] == 1:
dp[start][end] = 1
for _ in range(m):
s,e=map(int,input().split())
print(dp[s-1][e-1])
-시도해본 풀이
값이 입력될 때마다 완전 탐색으로 양끝을 비교한다.
이렇게 하면 시간초과한다
n=int(input())
data=[0]+list(map(int,input().split()))
m=int(input())
flag=True
for _ in range(m):
s,e=map(int,input().split())
for i in range((e-s)//2 +1):
if data[s+i] != data[e-i]:
flag=False
if not flag:
print(0)
else:
print(1)
'백준 > DP' 카테고리의 다른 글
[백준/dp] 2631번 : 줄세우기 (2) | 2024.02.16 |
---|---|
[dp/백준] 14002번: 14002번: 가장 긴 증가하는 부분 수열4 (0) | 2022.06.20 |
[dp/백준] 1915번: 가장 큰 정사각형 (0) | 2022.06.19 |
[dp/백준] 11660번: 구간 합 구하기 5 (0) | 2022.06.19 |
[dp/백준] 9184번: 신나는 함수 실행 (0) | 2022.06.19 |