아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

검열

면접 대비

시간 제한1초메모리 제한128 MB

요약
텍스트와 금지어 집합이 주어질 때 금지어를 반복해 지워 만들 수 있는 가장 짧은 문자열의 길이를 구한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 문자열, 구간
정답자
아직 제출이 없습니다

문제

새로운 교육 과정 개편의 일환으로, 전산학과는 교재를 검열하기로 했다. 이 문제에서는 입력으로 주어진 텍스트 문자열에서 필터 단어 집합에 속한 모든 문자열을 제거하는 프로그램을 작성해야 한다.

형식적으로, 단어 ww가 문자열 ss의 부분 문자열이면(즉 ww의 문자들이 ss 안에서 연속해서 나타나면) ww를 ss에서 제거할 수 있다. 텍스트 문자열 ss와 필터 단어 집합 TT가 주어질 때, TT의 단어들을 반복적으로 제거하여 만들 수 있는 가장 짧은 문자열의 길이를 구하여라. TT의 각 단어는 횟수 제한 없이 제거할 수 있으며, 한 단어를 제거하면 새로운 부분 문자열이 생겨 또 다른 단어를 제거할 수도 있다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 필터 집합 TT의 크기를 나타내는 정수 nn (1≤n≤501 \le n \le 50)으로 시작하고, 이어서 처리할 텍스트 문자열 ss, 그리고 TT에 속한 nn개의 단어 t1,…,tnt_1, \dots, t_n이 주어진다. 텍스트 문자열과 모든 필터 단어는 소문자 'a'부터 'z'까지만으로 이루어지며 길이는 11 이상 5050 이하이다. 한 테스트 케이스 안의 필터 단어는 모두 서로 다르다. 입력의 끝은 정수 00 하나만 있는 줄로 표시되며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 만들 수 있는 결과 문자열의 최소 길이를 정수 하나로 출력한다.

힌트

[…]는 각 단계에서 제거되는 단어를 나타내고, ∅는 빈 문자열을 뜻한다.

  • c[cde]defcde → [cde]fcde → f[cde] → f
  • [aa]baab → [ba]ab → [ab] → ∅
  • [aa]baab → b[aa]b → [bb] → ∅

예제3

  1. 예제 1

    입력
    1 ccdedefcde cde
    3 aabaab aa ba ab
    3 aabaab aa ba bb
    0
    
    예상 출력
    1
    0
    0
    
  2. 예제 2

    입력
    1 abc xyz
    0
    
    예상 출력
    3
    
  3. 예제 3

    입력
    1 aaaa aa
    0
    
    예상 출력
    0