백준 문제풀이

백준 16161 - 가장 긴 증가하는 팰린드롬 부분수열 [Python]

Vermeil 2021. 1. 6. 22:17

www.acmicpc.net/problem/16161

 

16161번: 가장 긴 증가하는 팰린드롬 부분수열

팰린드롬 수열이란 앞에서부터 읽을 때와 뒤에서부터 읽을 때 똑같은 수열을 말한다. 수열 {13, 25, 3, 25, 13}, {9, 5, 5, 9}는 팰린드롬이고, {1, 2, 3, 4, 5, 6, 7, 6}, {1, 2, 5, 4, 2}, {1, 1, 3, 2, 4}는 팰린드

www.acmicpc.net

개꿀잼 애드혹이다

 

길이가 1인 수열은 무조건 증가하는 팰린드롬 수열이다.

 

문자열의 중심을 잡고, 그 중심을 기준으로 바깥쪽으로 한 칸씩 이동하여 두 수가 같은지와, 증가하는 팰린드롬 수열인지를 확인하면 된다.

 

문자열의 길이가 짝수일 때와 홀수일 때를 나누어 풀었다.

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
= int(input())
= list(map(int, input().split()))
ans = 1
for i in range(n-1):
    if a[i] == a[i+1]: #문자열의 길이가 짝수
        temp = 2
        l = i-1
        r = i+2
        while 0 <= l and r < n:
            if a[l] == a[r] and a[l] < a[l+1]:
                temp += 2
                l -= 1
                r += 1
            else:
                break
        ans = max(temp, ans)
 
    if i > 0 and a[i-1== a[i+1and a[i-1< a[i]: #문자열의 길이가 홀수
        temp = 3
        l = i-2
        r = i+2
        while 0 <= l and r < n:
            if a[l] == a[r] and a[l] < a[l+1]:
                temp += 2
                l -= 1
                r += 1
            else:
                break
        ans = max(temp, ans)
print(ans)
cs

코드가 간결하지 않다. 나만 알아볼 수 있으면 괜찮긴 한데..

 

오타, 오류 지적 환영합니다.