diff --git a/백준/Gold/30805. 사전 순 최대 공통 부분 수열/README.md b/백준/Gold/30805. 사전 순 최대 공통 부분 수열/README.md new file mode 100644 index 0000000..369825e --- /dev/null +++ b/백준/Gold/30805. 사전 순 최대 공통 부분 수열/README.md @@ -0,0 +1,53 @@ +# [Gold IV] 사전 순 최대 공통 부분 수열 - 30805 + +[문제 링크](https://www.acmicpc.net/problem/30805) + +### 성능 요약 + +메모리: 32412 KB, 시간: 36 ms + +### 분류 + +그리디 알고리즘 + +### 제출 일자 + +2025년 4월 4일 12:17:59 + +### 문제 설명 + +

어떤 수열이 다른 수열의 부분 수열이라는 것은 다음을 의미합니다.

+ + + +

또한, 어떤 수열이 다른 수열보다 사전 순으로 나중이라는 것은 다음을 의미합니다.

+ + + +

양의 정수로 이루어진 길이가 N인 수열 {A1,,AN}이 주어집니다. 마찬가지로 양의 정수로 이루어진 길이가 M인 수열 {B1,,BM}이 주어집니다.

+ +

수열 A와 수열 B가 공통으로 갖는 부분 수열들 중 사전 순으로 가장 나중인 것을 구하세요.

+ +### 입력 + +

첫 줄에 수열 A의 길이 N이 주어집니다. (1N100)

+ +

둘째 줄에 N개의 양의 정수 A1,A2,,AN이 주어집니다. (1Ai100)

+ +

셋째 줄에 수열 B의 길이 M이 주어집니다. (1M100)

+ +

넷째 줄에 M개의 양의 정수 B1,B2,,BM이 주어집니다. (1Bi100)

+ +### 출력 + +

AB의 공통 부분 수열 중 사전 순으로 가장 나중인 수열의 크기 K를 출력하세요.

+ +

K0이라면, 다음 줄에 K개의 수를 공백으로 구분해 출력하세요. i번째 수는 AB의 공통 부분 수열 중 사전 순으로 가장 나중인 수열의 i번째 수입니다.

+ diff --git a/백준/Gold/30805. 사전 순 최대 공통 부분 수열/사전 순 최대 공통 부분 수열.py b/백준/Gold/30805. 사전 순 최대 공통 부분 수열/사전 순 최대 공통 부분 수열.py new file mode 100644 index 0000000..31029fb --- /dev/null +++ b/백준/Gold/30805. 사전 순 최대 공통 부분 수열/사전 순 최대 공통 부분 수열.py @@ -0,0 +1,41 @@ +import sys + +input = sys.stdin.readline + +n = int(input()) +A = list(map(int, input().split())) +m = int(input()) +B = list(map(int, input().split())) + +nextA = [[-1] * 101 for _ in range(n+1)] +nextB = [[-1] * 101 for _ in range(m+1)] + +for i in range(n-1, -1 ,-1): + for num in range(1, 101): + nextA[i][num] = nextA[i+1][num] + nextA[i][A[i]] = i + +for i in range(m-1, -1 ,-1): + for num in range(1, 101): + nextB[i][num] = nextB[i+1][num] + nextB[i][B[i]] = i + +result = [] +i = j = 0 +while i