만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

숫자 읽기

면접 대비

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

요약
0 이상 999,999,999 이하의 정수를 영어 단어로 바꿔 한 줄에 하나씩 출력합니다.
난이도

쉬움10점 중 3점

유형
문자열, 수학, 구현
정답자
아직 제출이 없습니다

문제

TTS(음성 합성) 프로그램 개발자들은 제품이 숫자를 잘 읽지 못한다는 것을 발견했다. 현재 프로그램은 숫자의 각 자릿수를 차례로 읽기만 해서, 몇 자리가 지나면 듣는 사람이 헷갈린다.

개발자 한 명은 숫자 문자열을 영어 문장으로 바꾸면 음성 엔진이 추가 수정 없이 읽을 수 있다고 제안했다. 예를 들어 "10231023"을 "one thousand and twenty three"로 바꾼다.

음이 아닌 정수를 일반적인 영어 표현으로 바꾸는 프로그램을 작성하라.

  • 00부터 1919까지는 고유한 이름이 있다: "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen".
  • 그다음 1010의 배수는 "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"이다.
  • 1010의 배수와 11부터 99까지의 숫자를 합친 수는 하이픈으로 잇는다. 예: 31⇒31 \Rightarrow "thirty-one", 77⇒77 \Rightarrow "seventy-seven".
  • 100100의 배수는 11부터 99까지의 숫자 이름에 "hundred"를 붙인다. 그 뒤에 0이 아닌 나머지가 오면 "and"로 잇는다. 예: 200⇒200 \Rightarrow "two hundred", 412⇒412 \Rightarrow "four hundred and twelve", 777⇒777 \Rightarrow "seven hundred and seventy-seven".
  • 천 단위와 백만 단위는 11부터 999999까지의 수에 위 규칙을 적용해 읽는다. 그 뒤에 0이 아닌 나머지가 오면 쉼표로 구분한다. 예: 1 253 101⇒1\,253\,101 \Rightarrow "one million, two hundred and fifty-three thousand, one hundred and one".
  • 천 단위나 백만 단위 부분이 있는 수 뒤에 11부터 9999까지의 나머지가 오면, 쉼표 대신 "and"로 구분한다. 예: 1 000 011⇒1\,000\,011 \Rightarrow "one million and eleven", 20 222 043⇒20\,222\,043 \Rightarrow "twenty million, two hundred and twenty-two thousand and forty-three".

입력

입력은 한 개 이상의 데이터셋으로 이루어진다. 각 데이터셋은 00부터 999 999 999999\,999\,999까지의 정수가 한 줄에 하나씩 주어진다. 입력에는 쉼표가 없으며, 양수에는 앞자리 0이 없다.

음수가 적힌 줄이 입력의 끝을 나타낸다.

출력

각 데이터셋마다 읽는 방식으로 바꾼 수를 한 줄에 출력한다.

출력은 왼쪽 정렬하며, 모든 알파벳은 소문자로 쓴다. 인접한 단어 사이에는 공백을 정확히 하나 둔다. 단, 하이픈과 쉼표 주변은 예외다. 쉼표 뒤에는 공백을 정확히 하나 둔다. 하이픈 양옆에는 공백을 두지 않는다.

예제1

  1. 예제 1

    입력
    1
    222143
    1000001
    -1
    
    예상 출력
    one
    two hundred and twenty-two thousand, one hundred and forty-three
    one million and one