Instruens Fabulam

면접 대비

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

요약
각 열의 정렬 방식을 지정하는 헤더를 읽고 테두리와 열 너비, 정렬을 갖춘 표를 출력한다.
난이도

보통10점 중 4점

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

문제

Instruens Fabulam은 라틴어로 "표(또는 차트)를 그린다"는 뜻이며, 이 문제에서 여러분이 할 일이 바로 그것입니다.

주어진 하나 이상의 표 데이터를 정해진 서식에 맞추어, 테두리와 열 정렬을 갖춘 표 형태로 출력하세요.

입력

입력은 하나 이상의 표 설명(table description)으로 이루어지며, 첫 글자가 *인 줄이 나오면 입력이 끝납니다.

각 표 설명은 헤더 줄로 시작합니다. 헤더 줄은 표의 열 개수와 각 열의 정렬 방식을 정의하는 하나 이상의 문자로 이루어지며, 각 문자는 <, =, > 중 하나로 각각 왼쪽 정렬, 가운데 정렬, 오른쪽 정렬을 의미합니다.

헤더 줄 다음에는 각 행에 해당하는 데이터 줄이 최소 2개, 최대 21개 이어집니다. 각 데이터 줄은 &로 구분된, 비어 있지 않은 항목들로 이루어지며, 항목의 개수는 헤더에서 정의한 열의 개수와 같습니다. 첫 번째 데이터 줄은 각 열의 제목이고, 나머지 데이터 줄은 표 본문의 내용입니다.

항목 내부에는 공백이 들어갈 수 있지만, 항목의 맨 앞이나 맨 뒤에는 공백이 오지 않습니다. 문자 <, =, >, &, *는 위에서 설명한 위치를 제외하고는 입력에 나타나지 않습니다.

출력

각 표 설명에 대해 다음 규칙을 지켜 표를 출력합니다.

  • 표의 전체 너비는 (줄 끝 문자를 제외하고) 79자를 넘지 않습니다.
  • 각 열의 너비는 그 열에서 가장 긴 항목에 맞추고, 열의 내용은 세로 막대 |로 구분합니다. 각 열에서 가장 긴 항목과 이를 감싸는 | 사이에는 정확히 한 칸의 공백을 둡니다.
  • 가로선은 밑줄 _이 아니라 붙임표 -로 그립니다. 표의 네 바깥 모서리에는 @를 놓습니다. 제목 줄과 본문을 구분하는 가로선에서, 열과 열이 만나는 교차점에는 +를 놓습니다.
  • 가운데 정렬 항목을 열 안에 정확히 가운데로 놓을 수 없을 때에는, 남는 한 칸의 공백을 항목의 오른쪽에 둡니다.

입력과 정답 출력은 위의 모든 서식 요건을 만족합니다. 다만 출력에는 두 칸 이상 연속된 공백이 나타날 수 있습니다. 각 줄의 맨 앞과 맨 뒤에는 공백이 없으며, (탭이 아니라) 공백 문자만 사용합니다.

예제1

  1. 예제 1

    입력
    <>=>
    TITLE&VERSION&OPERATING SYSTEM&PRICE
    Slug Farm&2.0&FreeBSD&49.99
    Figs of Doom&1.7&Linux&9.98
    Smiley Goes to Happy Town&11.0&Windows&129.25
    Wheelbarrow Motocross&1.0&BeOS&34.97
    >
    What is the answer?
    42
    <>
    Tweedledum&Tweedledee
    "Knock, knock."&"Who's there?"
    "Boo."&"Boo who?"
    "Don't cry, it's only me."&(groan)
    *
    
    예상 출력
    @-----------------------------------------------------------------@
    | TITLE                     | VERSION | OPERATING SYSTEM |  PRICE |
    |---------------------------+---------+------------------+--------|
    | Slug Farm                 |     2.0 |     FreeBSD      |  49.99 |
    | Figs of Doom              |     1.7 |      Linux       |   9.98 |
    | Smiley Goes to Happy Town |    11.0 |     Windows      | 129.25 |
    | Wheelbarrow Motocross     |     1.0 |       BeOS       |  34.97 |
    @-----------------------------------------------------------------@
    @---------------------@
    | What is the answer? |
    |---------------------|
    |                  42 |
    @---------------------@
    @---------------------------------------------@
    | Tweedledum                 |     Tweedledee |
    |----------------------------+----------------|
    | "Knock, knock."            | "Who's there?" |
    | "Boo."                     |     "Boo who?" |
    | "Don't cry, it's only me." |        (groan) |
    @---------------------------------------------@