만드는 중입니다

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

로마 휴일

시간 제한2초메모리 제한512 MB

요약
10^9 이하의 정수마다 로마 숫자 표기를 정렬한 순서에서의 위치를 구합니다. 끝에서부터 세면 음수로 출력합니다.
난이도

보통10점 중 6점

유형
문자열, 수학, 조합론
정답자
아직 제출이 없습니다

문제

고대 로마인은 수도교, 아주 곧은 도로, 토가, 불꽃을 뿜는 양초처럼 중요한 것을 많이 만들었다. 그러나 가장 쓸모없는 것은 로마 숫자다. 양의 정수를 나타내기에 매우 어색한 방식이기 때문이다.

로마 숫자는 일곱 개의 문자를 사용하며, 각 문자는 서로 다른 값을 나타낸다. I는 1, V는 5, X는 10, L은 50, C는 100, D는 500, M은 1000이다. 이 문자들을 조합해 아래 그림과 같은 기본 값을 만든다.

기본 값이 아닌 수 x의 로마 숫자 표기는, 먼저 x를 기본 값들의 합으로 나눈 뒤 각 기본 값을 큰 것부터 작은 것 순서로 변환해 얻는다. 기본 값을 고를 때는 항상 x 이하인 가장 큰 기본 값을 먼저 고르고, 남은 값 이하인 가장 큰 기본 값을 다음으로 고르는 식으로 진행한다. 예를 들어 14 = 10 + 4 = XIV이고, 792 = 700 + 90 + 2 = DCCXCII이다. 1000보다 큰 수는 필요한 만큼 M을 사용한다. 따라서 2018은 MMXVIII이고, 1000000은 M이 천 개 이어진 문자열이다(그래서 첫 문단에서 어색하다고 했다).

입력

첫 줄에 양의 정수 n≤100n \le 100이 주어지며, 이는 뒤따르는 정수의 개수이다. 이후 n개의 줄에 정수가 한 개씩 주어지며, 각 수는 10910^9 이하이다.

출력

n개의 값(n은 제외)마다 그 정수의 로마 순서상 위치를 한 줄에 하나씩 출력한다. 위치를 로마 순서의 끝에서부터 센 것이라면 음수로 출력한다. 예를 들어 38의 위치는 −1-1, 37의 위치는 −2-2이다.

예제1

  1. 예제 1

    입력
    3
    100
    101
    38
    
    예상 출력
    1
    302
    -1