오블챌을 위해 일단 풀 문제 선언만 하고 글 쓸게요...
다시 돌아와서 풀고 수정하겠습니다
요즘 본인의 부분수열 실력 부족에 심각성을 느끼고... 부분 수열 좀 백준에서 찾아 풀겠습니다
https://www.acmicpc.net/problem/7476
풀이로 곧 돌아오겠습니다 커밍쑨
----
일단 풀면서 LCS LIS 관련 문제임을 알게 되었고
이 포스트를 보면서
최장 공통 부분 수열의 길이를 구하는 방법과
DP를 역으로 탐색하면서, 그 수열 자체를 출력하는 방법도 알게 되었다
그러나 최장 공통 "증가" 부분 수열을 구하는 데 실패해서 일단 남겨두고 다른 문제를 먼저 풀고자 한다
실패한 코드는 아래와 같다
n = int(input())
a = list(map(int,input().split()))
m = int(input())
b = list(map(int,input().split()))
arr = [[0 for _ in range(m+1)] for _ in range(n+1)]
for i in range(1,n+1):
for j in range(1,m+1):
if a[i-1]==b[j-1]:
for k in range(i):
if a[k - 1] < a[i - 1]:
arr[i][j] = max(arr[i][j], arr[k][j] + 1)
else:
arr[i][j] = max(arr[i-1][j], arr[i][j-1])
length = max(max(row) for row in arr)
print(length)
result=[]
x,y = n,m
while x > 0 and y > 0:
if arr[x][y] == arr[x - 1][y]:
x -= 1
elif arr[x][y] == arr[x][y - 1]:
y -= 1
elif arr[x][y] == arr[x - 1][y - 1] + 1 and a[x - 1] == b[y - 1]:
result.append(a[x - 1])
x -= 1
y -= 1
else:
x -= 1
print(*result[::-1])
'개발자 강화 > 코딩 테스트' 카테고리의 다른 글
[백준] 1026 보물 Greedy python lv4 (1) | 2024.11.18 |
---|---|
[백준] 2217 로프 Greedy python 실4 (0) | 2024.11.18 |
[백준] 11727 2*n 타일링2 / 실3 / DP (0) | 2024.11.16 |
[백준] 14888 연산자 끼워넣기 Python3 DFS (0) | 2024.11.15 |
[백준] 2583 영역구하기 bfs 실1 (0) | 2024.11.14 |