검열
면접 대비시간 제한1초메모리 제한128 MB
텍스트와 금지어 집합이 주어질 때 금지어를 반복해 지워 만들 수 있는 가장 짧은 문자열의 길이를 구한다.
문제
새로운 교육 과정 개편의 일환으로, 전산학과는 교재를 검열하기로 했다. 이 문제에서는 입력으로 주어진 텍스트 문자열에서 필터 단어 집합에 속한 모든 문자열을 제거하는 프로그램을 작성해야 한다.
형식적으로, 단어 가 문자열 의 부분 문자열이면(즉 의 문자들이 안에서 연속해서 나타나면) 를 에서 제거할 수 있다. 텍스트 문자열 와 필터 단어 집합 가 주어질 때, 의 단어들을 반복적으로 제거하여 만들 수 있는 가장 짧은 문자열의 길이를 구하여라. 의 각 단어는 횟수 제한 없이 제거할 수 있으며, 한 단어를 제거하면 새로운 부분 문자열이 생겨 또 다른 단어를 제거할 수도 있다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 필터 집합 의 크기를 나타내는 정수 ()으로 시작하고, 이어서 처리할 텍스트 문자열 , 그리고 에 속한 개의 단어 이 주어진다. 텍스트 문자열과 모든 필터 단어는 소문자 'a'부터 'z'까지만으로 이루어지며 길이는 이상 이하이다. 한 테스트 케이스 안의 필터 단어는 모두 서로 다르다. 입력의 끝은 정수 하나만 있는 줄로 표시되며, 이 줄은 처리하지 않는다.
출력
각 테스트 케이스마다 만들 수 있는 결과 문자열의 최소 길이를 정수 하나로 출력한다.
힌트
[…]는 각 단계에서 제거되는 단어를 나타내고, ∅는 빈 문자열을 뜻한다.
c[cde]defcde→[cde]fcde→f[cde]→f[aa]baab→[ba]ab→[ab]→∅[aa]baab→b[aa]b→[bb]→∅