티스토리 뷰
반응형
solved.ac 티어 : 골드 2

10942번: 팰린드롬?
총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다.
www.acmicpc.net
이문제는 단순하게 입력으로 들어오는 구간마다 하나씩 비교하면서 처리하는 방식은 시간 초과가 난다.
그럼 어떻게 할 수 있을까? 예를 들어 1 2 1 1 2 1 이면 배열이 있고 1 6이라는 입력이 들어왔다.
1 2 1 1 2 1은 팰린드롬이기 때문에 1을 출력해야 한다.
이때 양끝을 제외한 나머지가 팰린드롬이고 양쪽이 같을 경우 팰린드롬이 된다.
이걸 계속 적용한다면 범위의 값이 팰린드롬인지 아닌지를 알 수 있고 이건 dp로 구할 수 있다.
처음에는 end-start=0 그다음에는 1,2,3.... n-1 순으로 비교를 하면서 dp 배열에 그 구간이 팰린드롬인지 아닌지를 저장하면 된다.
팰린드롬 판별은 범위의 양 끝 값이 같고 dp[start+1][end-1]이 1일 경우 팰린드롬이다.((end-start+1)이 1과 2일 경우만 예외 처리해주면 된다.)
import sys
sys.setrecursionlimit(10**9)
input=sys.stdin.readline
dp=[[0 for i in range(2010)]for g in range(2010)]
a=int(input())
l=list(map(int,input().split()))
for i in range(a):
start=0
for end in range(i,a):
if start==end:
dp[start][end]=1
elif end-start==1:
if l[start]==l[end]:dp[start][end]=1
elif l[start]==l[end] and dp[start+1][end-1]==1:
dp[start][end]=1
start+=1
b=int(input())
for i in range(b):
c,d=map(int,input().split())
print(dp[c-1][d-1])
혼자 푼 dp라 기분이 좋다~ ㅎㅎ
반응형
'ps' 카테고리의 다른 글
BOJ 2482(색상환)풀이 (0) | 2021.02.18 |
---|---|
BOJ 20040(사이클 게임)풀이 (0) | 2021.02.14 |
BOJ 16910(mex와 쿼리)풀이 (1) | 2021.02.10 |
BOJ 1348(주차장)풀이 (0) | 2021.02.06 |
BOJ 4386(별자리 만들기)풀이 (0) | 2021.02.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 트리에서의 다이나믹 프로그래밍
- 이분매칭
- 다이나믹 프로그래밍
- 최소 스패닝 트리
- 완전 탐색
- 구현
- 잡봇
- 그래프 이론
- 이분 탐색
- 자료 구조
- A Dance of Fire and Ice
- 정렬
- 그리디 알고리즘
- Python
- 트리
- 그래프 탐색
- 깊이 우선 탐색
- 느리게 갱신되는 세그먼트 트리
- 수학
- 세그먼트 트리
- BOJ
- 자료구조
- 누적 합
- 알고리즘
- 개발
- 선분 교차 판정
- KOI
- discord bot
- C++
- codeforces
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함