아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

로마 숫자 계산기

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

요약
로마 숫자로 된 산술식을 10개의 레지스터로 계산하는 명령을 처리하며, 각 대입의 결과나 Error를 출력하고 RESET과 QUIT도 다룬다.
난이도

보통10점 중 6점

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

문제

ACM이라는 마케팅 회사는 고객과 협력사에게 작은 선물로 나눠 주는 다양한 기발한 홍보 물품을 만든다. 그중 하나가 로마 숫자로 계산하는 계산기이다.

로마 숫자는 대문자를 사용해 임의의 음이 아닌 정수를 나타낼 수 있다.

기호IVXLCDM
값1510501005001000

숫자는 여러 글자를 이어 붙여 만들며, 값이 큰 글자가 항상 값이 작은 글자보다 앞에 와야 한다. 예외는 "I", "X", "C" 세 글자뿐이다. 이 글자들은 더 큰 값의 글자 앞에 놓여 끝자리가 4 또는 9인 값을 만들 수 있다. 허용되는 조합은 다음이 전부이다.

조합IVIXXLXCCDCM
값494090400900

모든 로마 숫자는 천의 자리를 먼저, 그다음 백의 자리, 십의 자리, 마지막으로 일의 자리를 나타내야 한다. 따라서 499는 항상 "ID"가 아니라 "CDXCIX"로 써야 한다.

실용적이지는 않지만 이 선물은 매우 멋지다고 여겨진다. 이 계산기를 위한 소프트웨어를 작성하라.

입력

입력은 여러 개의 명령으로 이루어지며, 각 명령은 한 줄에 하나씩 주어진다. 가능한 명령은 대입, "RESET", "QUIT"이다.

대입 명령은 계산기가 가진 열 개의 레지스터(0부터 9까지) 중 하나를 가리키는 한 자리 숫자로 시작한다. 레지스터 번호 뒤에는 등호("=")와 식이 이어진다. 식은 올바른 로마 숫자, 레지스터 이름(한 자리 숫자), 더하기("+")와 빼기("-") 기호로만 이루어진다. 모든 식은 올바르며 길이가 10000자를 넘지 않는다고 가정해도 된다.

"QUIT" 명령은 항상 입력의 마지막 명령이다.

출력

각 명령마다 정확히 한 줄을 출력한다.

  • 대입 명령의 경우, 레지스터 이름, 등호, 그리고 그 레지스터에 대입되는 값을 로마 숫자로 출력한다. 단, 식이 아직 대입되지 않은 레지스터를 참조하거나 결과가 음수이거나 10000보다 크면 대신 "Error"를 출력한다. 이때 어떤 레지스터의 값도 바뀌지 않는다.
  • "RESET" 명령의 경우, 이전의 모든 레지스터 대입을 무효화하고 "Ready"를 출력한다.
  • "QUIT" 명령의 경우, "Bye"를 출력하고 프로그램을 종료한다.

예제3

  1. 예제 1

    입력
    1=MC+IV-X
    1=1+1
    RESET
    1=1+X
    1=MM
    1=1+1+1+1+1
    2=1+1
    QUIT
    
    예상 출력
    1=MXCIV
    1=MMCLXXXVIII
    Ready
    Error
    1=MM
    1=MMMMMMMMMM
    Error
    Bye
    
  2. 예제 2

    입력
    QUIT
    
    예상 출력
    Bye
    
  3. 예제 3

    입력
    0=II
    1=0+III
    QUIT
    
    예상 출력
    0=II
    1=V
    Bye