728x90
https://www.acmicpc.net/problem/11054
11054번: 가장 긴 바이토닉 부분 수열
첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)
www.acmicpc.net
위의 문제는
https://bigkwangs.tistory.com/28
[백준] 12015번 : 가장 긴 증가하는 부분 수열 2
https://www.acmicpc.net/problem/12015 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) w
bigkwangs.tistory.com
해당문제를 leftarr와 rightarr로 쪼개어 길이를 계산하여 더하였다.
1. leftarr 는 해당 인덱스보다 작은 수열 길이를 구한다.
2. rightarr은 해당 인덱스보다 큰 수열의 길이를 구한다.
3. leftarr와 rightarr에서 자기자신은 2번이 중첩됨으로, -1를 한값의 최대값을 구한다.
from bisect import bisect_left
N = int(input())
arr = list(map(int, input().split()))
maxvalue = 0
for i in range(N):
leftarr = arr[:i+1]
rightarr = arr[i:]
temp = [leftarr[0]]
for j in range(len(leftarr)):
if leftarr[j] > temp[-1]:
temp.append(leftarr[j])
else:
idx = bisect_left(temp, leftarr[j])
temp[idx] = leftarr[j]
rightarr.reverse()
temp2 = [rightarr[0]]
for j in range(len(rightarr)):
if rightarr[j] > temp2[-1]:
temp2.append(rightarr[j])
else:
idx = bisect_left(temp2, rightarr[j])
temp2[idx] = rightarr[j]
maxvalue = max(maxvalue, len(temp)+len(temp2) -1)
print(maxvalue)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11057번 : 오르막 수 (0) | 2023.07.16 |
---|---|
[백준] 14003번 : 가장 긴 증가하는 부분 수열 5 (0) | 2023.07.16 |
[백준] 12015번 : 가장 긴 증가하는 부분 수열 2 (0) | 2023.07.16 |
[백준] 11053번 : 가장 긴 증가하는 부분수열 (0) | 2023.07.16 |
[백준] 2293번 : 동전 1 (0) | 2023.07.16 |