1696: 로마 숫자 판정
메모리제한:128 MB
시간제한:1.000 S
Judge Style:Text Compare
만든사람:
제출:0
통과:0
문제 설명
로마 시대 때는 현재 사용하는 아라비아 숫자가 아닌 다른 방법으로 수를 표현했다.
로마 숫자들 중 이 문제에서는 다음과 같은 7개의 기호만 활용한다.
수를 만드는 규칙은 다음과 같다.
[규칙1]
보통 큰 값을 가지는 기호를 왼쪽에, 작은 값을 가지는 기호를 오른쪽에 쓴다.
그리고 그 값은 모든 기호의 값을 더한 값이 된다.
<규칙1을 적용한 예시>
예를 들어 LX = 50 + 10 = 60이고. MLI = 1000 + 50 + 1 = 1051 이다.
[규칙2]
기호 V, L, D는 한 번만 사용할 수 있다.
기호 I, X, C, M 은 연속해서 세번까지만 사용할 수 있다.
<규칙 2를 적용한 예시>
VV나 LXIII와 같은 수는 없다.
같은 기호가 반복되면 그 값은 모든 기호의 값을 더한 값이 된다.
XXX = 10 + 10 + 10 = 30 이고, CLIII = 100 + 100 + 50 + 1 + 1 + 1 = 253이다.
[규칙3]
작은 기호가 큰 기호의 왼쪽에 오는 경우는 다음과 같다.
IV =4 , IX = 9, XL = 40, XC = 90, CD = 400, CM = 900
이들 각각은 한 번씩만 사용할 수 있다.
그런데 IV와 IX는 같이 쓸수 없으며 XL과 XC, CD와 CM또한 같이 쓸 수 없다.
이들 외에는 작은 숫자가 큰 숫자 왼쪽 어디에도 나올 수 없다.
예를 들어 XCXC니 CMCD, VX나 IIX와 같은 수는 없다.
참고로 LIX = 50 + 9 = 59, CXC = 100 + 90 = 190이 된다.
[규칙4]
모든 수는 가능한 가장 적은 개수의 로마 숫자들로 표현해야 한다.
<규칙 4를 적용한 예시>
60은 LX이지 XLXX가 아니고, 5는 V이지 IVI가 아니다.
<모든 규칙을 적용한 예시>
DLIII = 500 + 50 + 3 = 553
MCMXL = 1000 + 900 + 40 = 1940
로마숫자를 나타내는 기호가 입력으로 주어질 때, 그 기호가 올바른지를 판정하고 만약 올바르다면 값을 구하는 프로그램을 작성하시오.
[출처] 2022 제3회 세종 정보올림피아드 대회 예선 문항k
로마 숫자들 중 이 문제에서는 다음과 같은 7개의 기호만 활용한다.

수를 만드는 규칙은 다음과 같다.
[규칙1]
보통 큰 값을 가지는 기호를 왼쪽에, 작은 값을 가지는 기호를 오른쪽에 쓴다.
그리고 그 값은 모든 기호의 값을 더한 값이 된다.
<규칙1을 적용한 예시>
예를 들어 LX = 50 + 10 = 60이고. MLI = 1000 + 50 + 1 = 1051 이다.
[규칙2]
기호 V, L, D는 한 번만 사용할 수 있다.
기호 I, X, C, M 은 연속해서 세번까지만 사용할 수 있다.
<규칙 2를 적용한 예시>
VV나 LXIII와 같은 수는 없다.
같은 기호가 반복되면 그 값은 모든 기호의 값을 더한 값이 된다.
XXX = 10 + 10 + 10 = 30 이고, CLIII = 100 + 100 + 50 + 1 + 1 + 1 = 253이다.
[규칙3]
작은 기호가 큰 기호의 왼쪽에 오는 경우는 다음과 같다.
IV =4 , IX = 9, XL = 40, XC = 90, CD = 400, CM = 900
이들 각각은 한 번씩만 사용할 수 있다.
그런데 IV와 IX는 같이 쓸수 없으며 XL과 XC, CD와 CM또한 같이 쓸 수 없다.
이들 외에는 작은 숫자가 큰 숫자 왼쪽 어디에도 나올 수 없다.
예를 들어 XCXC니 CMCD, VX나 IIX와 같은 수는 없다.
참고로 LIX = 50 + 9 = 59, CXC = 100 + 90 = 190이 된다.
[규칙4]
모든 수는 가능한 가장 적은 개수의 로마 숫자들로 표현해야 한다.
<규칙 4를 적용한 예시>
60은 LX이지 XLXX가 아니고, 5는 V이지 IVI가 아니다.
<모든 규칙을 적용한 예시>
DLIII = 500 + 50 + 3 = 553
MCMXL = 1000 + 900 + 40 = 1940
로마숫자를 나타내는 기호가 입력으로 주어질 때, 그 기호가 올바른지를 판정하고 만약 올바르다면 값을 구하는 프로그램을 작성하시오.
[출처] 2022 제3회 세종 정보올림피아드 대회 예선 문항k
입력 설명
첫 번째 줄에 로마숫자로 표시된 문자열이 입력된다.
[입력값의 범위]
입력되는 로마숫자가 올바르다면 그 범위는 1이상 4000미만의 자연수이다.
[입력값의 범위]
입력되는 로마숫자가 올바르다면 그 범위는 1이상 4000미만의 자연수이다.
출력 설명
주어진 로마숫자의 구성이 바르지 않다면 NO를 출력한다.
만약 로마숫자의 구성이 바르다면 첫 번째 줄에 YES를 출력하고, 두 번째 줄에 그 값을 10진수로 출력한다.
만약 로마숫자의 구성이 바르다면 첫 번째 줄에 YES를 출력하고, 두 번째 줄에 그 값을 10진수로 출력한다.
입력 예시 Copy
IV
출력 예시 Copy
YES
4
도움
[입력예시 2]
III
[출력예시2]
YES
3
[입력예시 3]
IIII
[출력예시 3]
NO
III
[출력예시2]
YES
3
[입력예시 3]
IIII
[출력예시 3]
NO