달의 어두운 면에서 온 이야기

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

요약
사라진 텍스트 필터를 다시 구현한다. 각 줄에 순서가 정해진 네 가지 규칙을 적용하며, c 뒤가 아닌 ei는 ie로, 인접한 dd는 p로 바꾸고 EOF 줄에서 멈춘다.
난이도

보통10점 중 4점

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

문제

오래된 프로그램의 소스 코드가 사라졌습니다. 남은 것은 그 프로그램이 무슨 일을 하는지에 대한 증언뿐입니다. 이 프로그램을 똑같이 다시 구현해야 합니다.

프로그램은 영어 사전에 나올 법한 평범한 텍스트를 한 줄씩 읽어, 각 줄을 아래 규칙에 따라 변형한 뒤 출력합니다. 규칙은 반드시 아래 순서대로 각 줄에 적용합니다.

  1. 서로 붙어 있는 소문자 d 두 개(dd)를 p 하나로 바꿉니다. (연속한 d가 3개 이상 나오는 경우는 없습니다.)
  2. ei를 모두 ie로 바꿉니다. 단, 바로 앞 글자가 c이면(cei) 그대로 둡니다.
  3. pink를 모두 floyd로 바꿉니다.
  4. 소문자 영어 알파벳(a–z)도 아니고 공백도 아닌 문자를 모두 지웁니다. 공백은 입력에 있던 그대로 보존합니다.

각 규칙은 앞 단계까지 처리된 문자열 위에서 판정하며, 4번(문자 제거)은 맨 마지막에 수행합니다. 따라서 규칙 1–3의 인접 여부는 원래 입력의 인접 여부로 판정됩니다. 예를 들어 d123d는 두 d가 붙어 있지 않으므로 p가 되지 않고, 숫자만 지워져 dd가 됩니다. 반면 123dd의 dd는 붙어 있으므로 p가 됩니다.

원래 이야기에 나오던 vv를 m으로 바꾸는 동작은 프린터 오류였을 뿐, 프로그램의 기능이 아닙니다. 적용하지 마세요.

입력은 EOF라고만 적힌 줄을 만나면 종료됩니다. 그 줄과 그 뒤의 내용은 처리하지도, 출력하지도 않습니다.

입력

여러 줄의 텍스트가 주어집니다. 각 줄의 길이는 80글자 미만입니다. 입력은 EOF만 적힌 줄로 끝납니다.

출력

EOF 줄을 만나기 전까지의 각 줄에 대해, 위 규칙을 순서대로 적용한 결과를 한 줄씩 출력합니다. 공백은 입력에 있던 그대로 유지합니다.

예제1

  1. 예제 1

    입력
    unpinked is an 8 letter word. Honest! 
    vv is ok, d123d is ok, 123dd is not 
    i received mail from        liechtenstein
     ..  ...adding means to imitat.#$!%%$e 
    EOF
    
    예상 출력
    unfloyded is an  letter word onest 
    vv is ok dd is ok p is not 
    i received mail from        liechtenstien
       aping means to imitate