숫자 읽기
면접 대비시간 제한1초메모리 제한1024 MB
0 이상 999,999,999 이하의 정수를 영어 단어로 바꿔 한 줄에 하나씩 출력합니다.
문제
TTS(음성 합성) 프로그램 개발자들은 제품이 숫자를 잘 읽지 못한다는 것을 발견했다. 현재 프로그램은 숫자의 각 자릿수를 차례로 읽기만 해서, 몇 자리가 지나면 듣는 사람이 헷갈린다.
개발자 한 명은 숫자 문자열을 영어 문장으로 바꾸면 음성 엔진이 추가 수정 없이 읽을 수 있다고 제안했다. 예를 들어 ""을 "one thousand and twenty three"로 바꾼다.
음이 아닌 정수를 일반적인 영어 표현으로 바꾸는 프로그램을 작성하라.
- 부터 까지는 고유한 이름이 있다: "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen".
- 그다음 의 배수는 "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"이다.
- 의 배수와 부터 까지의 숫자를 합친 수는 하이픈으로 잇는다. 예: "thirty-one", "seventy-seven".
- 의 배수는 부터 까지의 숫자 이름에 "hundred"를 붙인다. 그 뒤에 0이 아닌 나머지가 오면 "and"로 잇는다. 예: "two hundred", "four hundred and twelve", "seven hundred and seventy-seven".
- 천 단위와 백만 단위는 부터 까지의 수에 위 규칙을 적용해 읽는다. 그 뒤에 0이 아닌 나머지가 오면 쉼표로 구분한다. 예: "one million, two hundred and fifty-three thousand, one hundred and one".
- 천 단위나 백만 단위 부분이 있는 수 뒤에 부터 까지의 나머지가 오면, 쉼표 대신 "and"로 구분한다. 예: "one million and eleven", "twenty million, two hundred and twenty-two thousand and forty-three".
입력
입력은 한 개 이상의 데이터셋으로 이루어진다. 각 데이터셋은 부터 까지의 정수가 한 줄에 하나씩 주어진다. 입력에는 쉼표가 없으며, 양수에는 앞자리 0이 없다.
음수가 적힌 줄이 입력의 끝을 나타낸다.
출력
각 데이터셋마다 읽는 방식으로 바꾼 수를 한 줄에 출력한다.
출력은 왼쪽 정렬하며, 모든 알파벳은 소문자로 쓴다. 인접한 단어 사이에는 공백을 정확히 하나 둔다. 단, 하이픈과 쉼표 주변은 예외다. 쉼표 뒤에는 공백을 정확히 하나 둔다. 하이픈 양옆에는 공백을 두지 않는다.