DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

최장 공통 부분 수열

문제로 돌아가기

해설

서브태스크 111에서는 AAA의 모든 부분 수열을 열거하고, 각각이 BBB의 부분 수열인지 확인할 수 있다. 시간 복잡도는 O(2N(N+M))O(2^N(N+M))O(2N(N+M))이다.

전체 문제에서는 Di,jD_{i,j}Di,j​를 AAA의 앞 iii개 원소와 BBB의 앞 jj개 원소의 최장 공통 부분 수열 길이라고 하자. 이다. 이면 이고, 그렇지 않으면 이다.

DN,MD_{N,M}DN,M​부터 역추적한다. 현재 두 원소가 같으면 그 원소를 답에 넣고 두 인덱스를 모두 줄인다. 다르면 값이 같은 쪽의 이전 상태로 이동한다. 역추적한 원소를 뒤집으면 정답이다. 값이 같은 이전 상태가 둘이라면 어느 쪽으로 이동해도 된다.

한 케이스의 시간 복잡도와 공간 복잡도는 모두 O(NM)O(NM)O(NM)이다.

Solution written by GPT6

j
D0,j=Di,0=0D_{0,j}=D_{i,0}=0D0,j​=Di,0​=0
Ai=BjA_i=B_jAi​=Bj​
Di,j=Di−1,j−1+1D_{i,j}=D_{i-1,j-1}+1Di,j​=Di−1,j−1​+1
Di,j=max⁡(Di−1,j,Di,j−1)D_{i,j}=\max(D_{i-1,j},D_{i,j-1})Di,j​=max(Di−1,j​,Di,j−1​)