Maximal K-edit Subset

문제 정보

    • 문제 ID
    • 시간 제한
    • 메모리 제한
    • 제출 횟수
    • 정답 횟수 (비율)
    • 출제자
    • 출처
    • 분류

문제

강산이 한번 변하고도 남는, 무려 12년 반이라는 기간 동안 한 학교에서 학사부터 박사까지 마친 Hwan은 우연찮은 기회를 잡아 먼 타향의 어느 의대 부속 연구소에서 박사후과정을 하게 되었다. 2개월 가량이 지나 어느 정도 적응을 마친 어느 날, 그가 속한 연구실의 교수는 그의 자리에 들러 갑작스레 새로운 프로젝트를 진행하자고 이야기 하였고, 이에 대한 간략한 설명을 전달하고 자리를 떠났다. 하지만 너무나 새로운 분야의 프로젝트에 참가하게 되었기 때문에 당장은 자신이 해야 하는 일이 무엇인지 알 수 없었으나, 박사과정에서 익힌 며칠간의 꾸준한 구글 검색 엔진을 통해 이번 프로젝트를 전산학의 문제로 치환하여 풀 수 있다는 것을 알게 되었다. Hwan이 정의한 문제인 maximal k-edit subset이라는 문제는 다음과 같다.

우선 알파벳 A, C, G 그리고 T로 구성된 문자열들로 이뤄진 LS가 주어진다. 이때 L의 모든 원소의 문자열의 길이는 모두 같고, S의 모든 원소의 문자열의 길이는 같으며, 그리고 S 문자열의 길이는 L보다 길거나 같다고 가정한다. 여기서 S의 부분 집합 중, 모든 부분집합의 원소들이 적어도 한 개 이상의 L에 속한 문자열과 k 이하의 Edit Distance(두 문자열을 일치하도록 만들기 위한 연산의 수, 이 때 문자의 삽입, 삭제 혹은 변경을 하는 경우를 한번의 연산으로 간주한다)를 갖는 부분문자열(substring)을 포함하고 있으면, 해당 부분집합을 k-edit subset으로 정의할 수 있다. 이 문제에서는 가능한 k-edit subset이 되는 경우 중 최대 크기를 찾아야한다.

Hwan은 문제를 잘 정의했지만, 다른 프로젝트도 진행하고 있던 중이였기 때문에 이 문제를 풀 코드를 작성할 시간이 없었고, 아직 영어의 장벽을 느끼고 있는지라 다른 연구실 동료들에게 부탁하기도 힘든 상태이다. 결국 그는 한국에 있는 문제 해결과 코딩에 조예가 깊고 친한 후배였던 당신에게 도움을 구하기로 했으며, 당신은 그의 사탕발림에 넘어가게 되어 이 문제를 해결해야 한다. 그리고 그는 마지막으로 한마디를 더 덧붙였다.
"데이터의 개수가 방대하니까 프로그램 수행시간이 아주 빨라야 할 거야!"

입력

첫 번째 줄에 세 개의 정수 N_L, N_S, k (1 \le N_L \le 500, 1 \le N_S \le 2\,500, 0 \le k \le 4)가 공백으로 구분되어 주어진다. N_LL의 원소의 수이고, N_SS의 원소의 수를 의미한다.

두 번째 줄부터 N_L개의 줄에 걸쳐 각 줄에 하나씩 L에 속한 문자열이 주어진다. 각 문자열의 길이는 k + 1이상 30이하이다.

N_L + 2번째 줄부터 N_L개의 줄에 걸쳐 각 줄에 하나씩 S에 속한 문자열이 주어진다. 각 문자열의 길이는 k + 1이상 50이하이다.

입력으로 주어지는 모든 문자열은 반드시 A, C, G, T로만 구성된다.

출력

첫 번째 줄에 주어진 입력에 대한 maximal k-edit subset의 크기를 출력한다.

예제 입력

Example 1
3 6 0
ACGT
ACCT
GCGC
AAACGTCC
AAGCGCCC
AAACGTCC
AAACCTCC
AAGCGCCC
AAAATTTT

Example 2
3 6 1
ACGT
ACCT
GCGC
AAACTCCC
AAGCGCGC
AAACGTCC
AAACCTCC
AATTTTCC
AAAATTTT

예제 출력

Example 1
5

Example 2
4

노트

예제 입출력에서 Example로 시작하는 줄은 실제 입출력에 포함되지 않습니다. 각각을 하나의 입출력 세트로 읽어주세요.

2개의 댓글이 있습니다.