문자열 A와 목표 K가 주어질 때, A의 앞 i글자와 A에서 가장 적게 나온 글자를 N-i개 붙인 문자열이 A와 LCS 길이 K를 갖는 가장 작은 i를 찾는다.
보통7문자열동적 계획법그리디아직 제출이 없습니다시간 제한2초메모리 제한256 MB베라는 최장 공통 부분 수열(LCS) 문제를 공부하고 있다.
문자열은 소문자 알파벳을 나열한 것이고, 비어 있어도 된다. 문자열 S의 부분 수열은 S에서 글자 몇 개를 지우고 남은 문자열이다. 하나도 지우지 않아도 되고 전부 지워도 된다. 예를 들어 vra, a, 빈 문자열, vera는 모두 vera의 부분 수열이다. 두 문자열 A와 B의 최장 공통 부분 수열은 둘 모두의 부분 수열 중 길이가 가장 긴 문자열이다. 최장 공통 부분 수열은 여러 개일 수 있다. ea는 vera와 eats의 최장 공통 부분 수열이므로 이 두 문자열의 LCS 길이는 2다.
베라는 길이가 모두 N인 두 문자열 A와 B의 LCS 길이를 구하는 숙제를 받았다. 답을 K라고 적어 두었는데 B를 잃어버렸다. A와 K가 주어진다. A와의 LCS 길이가 정확히 K인 길이 N짜리 문자열 B를 찾아라. 베라가 계산을 틀렸다면 그런 B는 존재하지 않는다.
입력 형식은 다음과 같다.
N K
A
A와의 LCS 길이가 K인 문자열은 여러 개일 수 있으므로, 다음 규칙이 정하는 문자열 하나만 정답으로 인정한다.
A에 가장 적게 나오는 글자를 c라고 하자. 그런 글자가 여럿이면 알파벳 순서가 가장 빠른 글자를 고른다. A에 한 번도 나오지 않는 글자는 나온 횟수가 0이다. i=0,1,…,N에 대해 Bi를 A의 앞 i글자 뒤에 c를 N−i개 이어 붙인 문자열이라고 하자. A와 Bi의 LCS 길이가 정확히 K인 가장 작은 i를 찾아 Bi를 한 줄에 출력한다. 그런 i가 없으면 WRONGANSWER를 출력한다.
조건을 만족하는 B가 존재하는지는 N과 K만으로 정해지지 않는다. A에 어떤 글자가 몇 번 나오는지에 따라 달라진다.