Soundex 색인
면접 대비시간 제한1초메모리 제한512 MB
대문자 이름마다 Soundex 코드(첫 글자와 숫자 세 자리)를 만들고, 모음을 건너뛰며 같은 코드가 연속될 때 하나로 합쳐 이름과 코드를 정해진 열에 출력합니다.
문제
Soundex 색인 시스템은 발음이 비슷하거나 철자가 비슷한 이름을 부호화하여 쉽게 검색할 수 있도록 개발되었다. 미국 인구조사국에서 사용해 왔으며, 일부 주에서는 운전면허증 번호를 부호화할 때 이 시스템을 사용한다. 여러분의 과제는 이름을 한 줄에 하나씩 차례로 읽어 각 이름에 대응하는 soundex 부호를 계산하고, 출력 파일에 이름과 그 soundex 부호를 한 줄에 하나씩 쓰는 것이다.
이름은 길이가 1에서 20인 대문자 알파벳(ASCII 값 65부터 90까지)으로 이루어진다. 길이가 20보다 짧은 이름은 빈칸으로 채우지 않는다. 따라서 이름은 대문자로만 구성된다.
Soundex 부호를 만드는 방법:
Soundex 부호는 항상 문자 하나와 숫자 세 자리로 이루어진다. 다음은 soundex 부호화 규칙이다.
-
이름의 첫 글자는 soundex 부호에서 첫 번째이자 유일한 문자로 나타난다.
-
문자 A, E, I, O, U, Y, W, H는 부호화하지 않지만, 연속된 부호열을 끊는다(다음 규칙 참고).
-
나머지 문자는 모두 부호화한다. 단, 같은 부호 숫자로 부호화될 문자가 바로 앞에 올 때는 제외한다. 첫 글자도 포함한다.
-
soundex 부호 대응표는 다음과 같다.
-
부호가 짧으면 뒤에 0을 붙여 모든 이름이 문자 하나와 숫자 세 자리로 부호화되도록 한다.
-
부호가 더 길면 세 번째 숫자 뒤를 자른다.
입력
입력은 한 줄에 하나씩 주어지는 이름 목록이다. 각 이름은 20자를 넘지 않으며, 대문자만 사용된다고 가정할 수 있다. 프로그램은 파일의 끝을 감지할 때까지 이름을 계속 읽는다.
출력
출력은 이름 열과 그에 대응하는 soundex 부호 열로 이루어진다. 출력의 첫 줄 10번째 칸에 "NAME"을, 35번째 칸에 "SOUNDEX CODE"를 쓴다. 제목 줄 다음에는 이름과 soundex 부호를 한 줄에 하나씩 쓰며, 이름은 10번째 칸에서 시작하고 soundex 부호는 35번째 칸에서 시작한다. 마지막 이름 바로 다음 줄 끝에 "END OF OUTPUT"이라는 주석을 20번째 칸에서 시작하여 쓴다.