세금 메모 XML 변환

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

요약
세율과 종료 월/연도, 시작 월/일이 적힌 약식 세금 기록을 해석해 유효하면 XML로 출력하고 모호하거나 잘못된 경우 BAD DATA로 표시하는 문제입니다.
난이도

보통10점 중 6점

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

문제

칼리이의 세금 계약은 관료가 적은 속기 메모로 남는다. 각 메모에는 세율, 계약 종료 월/연도, 새 계약 시작 월/일이 들어 있다. 종료일의 일자는 항상 15일이고, 시작일의 연도는 2003년 11월 9일을 기준으로 정한다. 시작 월/일이 11월 9일 이후이면 2003년, 그보다 앞서면 2004년으로 본다.

각 입력 줄의 속기 메모를 해석해 XML로 출력하는 프로그램을 작성하시오. 메모가 잘못되었거나 둘 이상의 해석이 가능하면 그 줄은 잘못된 데이터로 처리한다.

입력

입력은 여러 데이터 세트로 이루어지며, 한 줄이 한 데이터 세트이다. 올바른 줄은 다음 세 필드를 이 순서로 포함한다. 필드 사이에는 공백이 0개 이상 올 수 있다.

  1. 세율

    • 정수 세율은 숫자 뒤에 %를 붙인다.
    • 소수점은 사용할 수 없다.
    • 분수가 포함될 수 있다. / 바로 앞의 한 자리가 분자이고, 그 앞의 숫자들은 정수 부분이다. 분모는 2, 4, 8 중 하나이며 분자는 분모보다 작아야 한다.
    • 최대 세율은 99.875%이다.
  2. 계약 종료 날짜

    • 월은 한 자리 또는 두 자리, 연도는 두 자리이다.
    • 월과 연도 사이에 하이픈 하나가 있을 수도 있다.
    • 종료일의 일자는 항상 15일이다.
  3. 계약 시작 날짜

    • 월은 한 자리 또는 두 자리, 일은 두 자리이다.
    • 월과 일 사이에 하이픈 하나가 있을 수도 있다.
    • 모든 달은 31일까지 있다.

출력

각 데이터 세트마다 인덱스는 1부터 시작한다. 올바른 데이터는 다음 형식으로 출력한다. 들여쓰기 한 단계는 공백 4개이다.

<Kalii Index=N>
    <startdate>(start date)</startdate>
    <rate>(tax rate)</rate>
    <enddate>(end date)</enddate>
</Kalii>

(start date)는 DDMMMYY, (end date)는 15MMMYY 형식이다. DD는 01부터 31까지의 일, MMM은 JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC 중 하나, YY는 연도의 마지막 두 자리이다. 세율은 소수점 아래 세 자리까지 출력한다.

데이터가 잘못되었거나 모호하면 다음 한 줄을 출력한다.

<Kalii Index=N>BAD DATA</Kalii>

예제1

  1. 예제 1

    입력
    25/850812-31
    6%     02110122
    6.75% 2-11 4-23
    
    예상 출력
    <Kalii Index=1>
        <startdate>31DEC03</startdate>
        <rate>2.625</rate>
        <enddate>15MAY08</enddate>
    </Kalii>
    <Kalii Index=2>
        <startdate>22JAN04</startdate>
        <rate>6.000</rate>
        <enddate>15FEB11</enddate>
    </Kalii>
    <Kalii Index=3>BAD DATA</Kalii>