From 433e17e09749391667340f8c87456dad73d6cd35 Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Fri, 4 Apr 2025 12:18:12 +0900 Subject: [PATCH] =?UTF-8?q?[Gold=20IV]=20Title:=20=EC=82=AC=EC=A0=84=20?= =?UTF-8?q?=EC=88=9C=20=EC=B5=9C=EB=8C=80=20=EA=B3=B5=ED=86=B5=20=EB=B6=80?= =?UTF-8?q?=EB=B6=84=20=EC=88=98=EC=97=B4,=20Time:=2036=20ms,=20Memory:=20?= =?UTF-8?q?32412=20KB=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md | 53 +++++++++++++++++++ .../사전 순 최대 공통 부분 수열.py | 41 ++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 백준/Gold/30805. 사전 순 최대 공통 부분 수열/README.md create mode 100644 백준/Gold/30805. 사전 순 최대 공통 부분 수열/사전 순 최대 공통 부분 수열.py 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