증인 보호 문장 검열

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

요약
민감한 단어가 들어간 문장의 모든 문자를 @로 바꾸고 나머지는 그대로 출력한다.
난이도

보통10점 중 4점

유형
문자열, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

증인 보호 프로그램은 범죄의 증인에게 새로운 신원을 부여하여, 법정에서 불리한 증언을 한 상대의 보복으로부터 이들을 보호한다.

그러나 실제로는 보호받는 증인 다수가 스스로에게 가장 큰 위험이 된다. 친척이나 친구에게 자신이 무사하다는 것을 알리려다 새 거주지와 신원을 노출하기 때문이다.

새 시범 사업에서는 이러한 연락을 이메일 형태로만 허용한다. 담당 직원이 먼저 각 메시지를 검토하여 위험할 수 있는 문장을 잘라낸 뒤, 부서 컴퓨터에서 이메일을 대신 보내 증인을 추적할 수 없게 한다.

그러나 예산이 삭감되어 모든 메시지를 사람이 직접 읽을 여력이 없다. 따라서 자동화된 해결책이 필요하다.

민감한 단어 목록과 평문 메시지가 주어질 때, 민감한 단어를 포함하는 문장을 (대소문자 구분 없이) 모두 찾는 프로그램을 작성하라. 그러한 문장에서는 줄 종결 문자를 제외한 모든 문자를 @ 문자로 바꾼다.

이 문제에서:

  • 단어는 연속된 영숫자(alphanumeric) 문자의 최대 구간이다. 그 경계는 메시지의 시작 또는 끝, 그리고/또는 영숫자가 아닌 임의의 문자이다.
  • 문장은 다음으로 경계가 정해지는 연속된 문자의 최대 구간이다: 메시지의 시작 또는 끝, 문단 경계(문자가 하나도 없는 빈 줄), 그리고/또는 구두점 ., ?, ! 중 하나. 문장을 끝내는 구두점 문자는 그 문장에 포함된다.

입력

입력은 하나 이상의 데이터 집합으로 이루어진다. 각 데이터 집합은 단어 목록과 그 뒤의 메시지로 구성된다. 입력의 끝은 EndOfInput만 적힌 줄로 표시된다.

단어 목록은 0개 이상의 단어로 이루어지며, 한 줄에 하나씩 왼쪽 정렬로 주어진다. 각 단어의 길이는 최대 40자이다. 단어 목록의 끝은 EndOfList만 적힌 줄로 표시된다.

단어 목록 바로 뒤에 메시지가 온다. 메시지는 0개 이상의 텍스트 줄로 이루어지며, 각 줄은 최대 80자이다. 메시지의 끝은 EndOfMsg만 적힌 줄로 표시된다.

출력

각 데이터 집합에 대해, 민감한 단어를 포함하는 문장을 위에서 설명한 대로 @ 문자로 바꾸는 것을 제외하고는 입력에 나타난 그대로 메시지를 출력한다. 각 메시지 뒤에는 = 문자 4개만으로 이루어진 줄(====)을 출력한다.

예제3

  1. 예제 1

    입력
    John
    jane
    Smith
    Jones
    Kansas
    court
    crime
    phone
    555
    EndOfList
    Dear Mom,
    
    I just wanted to let you know that I am alive and well. Jane is
    well also. I’m glad they were able to relocate us. My
    only complaint is that I wish they could have found someplace
    more exciting than Kansas for us to live in! If you really need
    to contact us, you can do so by telephone. The number is
    (757) 555-0478, but don’t tell anyone.
    
    Love,
    the new John Smith
    EndOfMsg
    EndOfInput
    
    예상 출력
    Dear Mom,
    
    I just wanted to let you know that I am alive and well.@@@@@@@@
    @@@@@@@@@@ I’m glad they were able to relocate us.@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ If you really need
    to contact us, you can do so by telephone.@@@@@@@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    
    @@@@@
    @@@@@@@@@@@@@@@@@@
    ====
    
  2. 예제 2

    입력
    EndOfList
    Hello world. This is fine!
    EndOfMsg
    EndOfInput
    
    예상 출력
    Hello world. This is fine!
    ====
    
  3. 예제 3

    입력
    phone
    EndOfList
    Call me on the phone. Use the telephone instead.
    EndOfMsg
    EndOfInput
    
    예상 출력
    @@@@@@@@@@@@@@@@@@@@@ Use the telephone instead.
    ====