눈에는 눈 (An I for an Eye)

시간 제한2초메모리 제한512 MB

요약
고정된 약어 표에 따라 각 줄을 왼쪽에서 오른쪽으로 훑으며, 같은 위치에서는 가장 긴 것을 골라 치환하고 대소문자도 맞춘다.
난이도

보통10점 중 4점

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

문제

Ken은 요즘 Twitter에서 글자 수 제한을 지키는 데 애를 먹고 있어서, 자주 쓰이는 철자 조합을 정해진 약어로 줄여 주는 간단한 프런트엔드 프로그램을 만들기로 했다. 약어는 아래 표와 같다.

문자대체하는 철자 조합
@at
&and
1one, won
2to, too, two
4for, four
bbea, be, bee
csea, see
ieye
ooh, owe
rare
uyou
ywhy

Ken이 프로그램을 만들려는 순간, 자신의 컴퓨터 지식이란 게 ... 음 ... Twitter를 쓰는 정도라는 걸 깨닫는다. 그는 도움을 줄 사람을 찾고 있다. r u th@ some1?

입력

입력의 첫 줄에는 처리할 텍스트 줄의 수 n이 주어진다. 그다음 n개의 줄이 주어진다. 각 줄은 영숫자와 공백으로만 이루어지고, 공백이 아닌 문자가 최소 하나 있다. 각 줄의 길이는 최대 200자이다.

출력

각 줄에 알맞은 치환을 적용해 출력한다. 치환은 단어 안에서도 이루어진다. 예를 들어 that은 th@로 바뀐다. 두 철자 조합이 겹치면(예: baton의 at과 to) 먼저 나오는 것만 치환한다(이 경우 결과는 b@on). 두 철자 조합이 같은 위치에서 시작하면(예: been의 be와 bee) 더 긴 것을 치환한다(이 경우 결과는 bn). 철자 조합이 대문자로 시작하면 약어도 (해당되는 경우) 대문자로 쓴다. 마지막으로, 한 번 치환된 문자는 이후 다른 치환의 일부가 될 수 없다. 예를 들어 입력이 oweh라면 먼저 owe를 o로 치환해 oh를 얻는다. 이때 oh는 치환된 문자를 포함하므로 oh를 o로 다시 치환하지 않는다.

예제1

  1. 예제 1

    입력
    3
    Oh say can you see
    I do not understand why you are so cranky just because Karel won
    Formation
    
    예상 출력
    O say can u c
    I do not underst& y u r so cranky just bcause Krl 1
    4m@ion