[백준 10942] 팰린드롬? #273
ghdcksgml1
started this conversation in
1일 1알고리즘
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
문제
https://www.acmicpc.net/problem/10942
[문제설명]
숫자와 구간이 주어졌을 때 그 구간이 팰린드롬인지 0과 1로 나타내는 문제로
1<=N<=2,000까지 숫자가 주어지는데 구간은 1<=M<=1,000,000이라서
구간이 주어질때마다 팰린드롬인지 체크하는 시간복잡도는 O(N*M)으로 상당한 비용을 가진다.
따라서, [S,E]에 대한 팰린드롬여부 정보를 미리 저장해두고, 쿼리가 주어질때마다 리턴해주면 쿼리의 시간복잡도는 O(M*1)이 된다.
dp[2001][2001]에 [S,E] 정보를 넣어줘야하는데 어떻게 구할지 생각해보는데 팰린드롬의 특징을 하나 발견함
v = {1, 2, 1, 3, 1, 2, 1 }숫자가 있을때 팰린드롬인지를 파악하기 위해 양쪽끝에서 하나씩 줄여나가며 팰린드롬인지를 체크한다.
v[0] == v[6], v[1] == v[5], v[2] == v[4], v[3] == v[3] 이므로 팰린드롬이고, 여기서 v[0] == v[6]이더라도 나머지 [1,5] 가 모두 팰린드롬이여야 해당 배열이 팰린드롬이 된다.
여기서 dp를 이용하려면 [1,5]의 정보를 가지고 있다면? [1,5]가 팰린드롬이면 v[0] == v[6]이므로 v 배열은 팰린드롬이 되고, [1,5]가 팰린드롬이 아니라면 v[0] == v[6]이라도 팰린드롬이 아닌 배열이 된다.
또다른 특징은, v = {1, 2, 1, 3, 1, 2, 3 } 이라면, v[0] != v[6]일 경우 나머지 구간을 체크하지 않아도 팰린드롬이 아닌것을 확인할 수 있다.
위 두가지 특징을 이용해 dp를 짜보면, 다음과 같이 탑다운 재귀형식으로 코드를 짤 수 있다.
시간복잡도
시간복잡도는 dp[S][E]를 만드는데 O(N2)이 걸린다.
소스코드
Beta Was this translation helpful? Give feedback.
All reactions