IVXLCDM

면접 대비

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

요약
소문자로 된 비문 한 줄이 주어질 때, 그 안에서 부분 수열로 읽을 수 있는 유효한 로마 숫자 가운데 가장 큰 값을 구하고, 없으면 0을 출력한다.
난이도

보통10점 중 7점

유형
그리디, 문자열, 동적 계획법, 구현
정답자
아직 제출이 없습니다

문제

로마 숫자는 일곱 개의 문자 I, V, X, L, C, D, M으로 표기하며, 각각 11, 55, 1010, 5050, 100100, 500500, 10001000을 나타낸다. 수를 표기할 때는 값이 큰 문자를 왼쪽에, 값이 작은 문자를 오른쪽에 두고 필요하면 문자를 반복한다. 예를 들어 33은 III, 7373은 LXXIII로 쓴다.

예외는 일의 자리가 44 또는 99, 십의 자리가 4040 또는 9090, 백의 자리가 400400 또는 900900인 경우이며, 이때는 빼기 표기 IV(44), IX(99), XL(4040), XC(9090), CD(400400), CM(900900)를 사용한다. 예를 들어 2424, 3939, 4444, 4949, 9494는 각각 XXIV, XXXIX, XLIV, XLIX, XCIV로 쓴다.

다음 규칙에 따라 모든 값은 유일한 표기를 가진다.

  • I, X, C는 연속해서 최대 세 번까지 나올 수 있다.
  • V, L, D는 각각 최대 한 번만 나올 수 있다.
  • M은 몇 번이든 나올 수 있다.
  • 위에 나열한 것 외의 빼기 표기는 허용되지 않는다(예를 들어 9999를 IC로 쓰는 것은 금지된다).

중세에는 건물이 세워진 연도를 비문에 숨겨 두는 일이 많았다. 비문의 일부 글자를 강조한 뒤 강조된 글자만 순서대로 읽으면 로마 숫자로 된 연도가 되었다. 예를 들어 비문 Matfyz is the best schooL In prague에서 강조된 글자를 읽으면 MLI, 즉 10511051이 된다.

세월이 흐르면 비문이 손상되어 어떤 글자가 강조되어 있었는지 알 수 없게 되기도 한다. 비문의 원문만 주어졌을 때, 그 건물이 세워졌을 수 있는 가장 늦은 연도, 즉 비문의 글자들을 부분 수열로 읽어 만들 수 있는 유효한 로마 숫자의 최댓값을 구하여라. 이때 글자의 대소문자는 구분하지 않는다. 예를 들어 matfyz is the best school in prague에서는 MCLI, 즉 11511151을 읽어낼 수 있다.

입력

입력은 하나 이상의 비어 있지 않은 줄 l1,…,lnl_1, \dots, l_n으로 이루어진다. 각 줄은 소문자 알파벳과 공백으로만 이루어지며, 길이는 최대 10,00010{,}000자이다. 입력의 끝까지 처리한다.

출력

각 줄 lil_i에 대해, 그 줄의 일부 글자를 강조하여 만들 수 있는 로마 숫자의 최댓값을 정수 하나로 한 줄에 출력한다. 만들 수 있는 로마 숫자가 없으면 00을 출력한다.

예제4

  1. 예제 1

    입력
    matfyz is the best school in prague
    no year
    
    예상 출력
    1151
    0
    
  2. 예제 2

    입력
    x
    i
    v
    l
    c
    d
    m
    
    예상 출력
    10
    1
    5
    50
    100
    500
    1000
    
  3. 예제 3

    입력
    mmmm
    m
    mmm mm
    
    예상 출력
    4000
    1000
    5000
    
  4. 예제 4

    입력
    mmmdccclxxxviii
    
    예상 출력
    3888