HTML 에디터

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

요약
유효한 HTML 문자열과 구간이 주어질 때, 그 부분 문자열이 원래 서식을 유지하도록 필요한 태그로 감싼 결과를 출력한다.
난이도

보통10점 중 6점

유형
문자열, 스택, 구현
정답자
아직 제출이 없습니다

문제

스마트폰용 HTML 에디터를 개발하던 중, 잘라내기·복사하기·붙여넣기 기능에서 문제가 생겼다. 간단해 보이지만 실제로는 꽤 까다로운 기능인데, 선택한 구간의 서식을 그대로 유지해야 하기 때문이다. 게다가 선택한 구간의 서식은 구간 밖에 있는 태그의 영향까지 받으므로 처리가 더 복잡하다.

HTML 문서가 주어지고, 그 안에서 위치 BB부터 EE까지의 구간을 선택했다. 이때 BB부터 EE까지의 부분 문자열이 원래 문서에서 가지고 있던 서식과 똑같은 서식을 갖도록, 부분 문자열의 앞과 뒤에 필요한 태그를 추가해야 한다.

모든 태그는 여는 태그(예: <b>)와 닫는 태그(예: </b>)가 쌍을 이룬다. 두 태그 사이에는 또 다른 태그를 넣을 수 있다. 단, 아직 닫히지 않은 태그가 남아 있으면 그와 짝이 맞지 않는 닫는 태그를 먼저 쓸 수 없다. 예를 들어 <i>abc<b>def</i>ghi</b>는 올바르지 않은 HTML이다. 또한 이미 열려 있는(아직 닫지 않은) 태그를 다시 열 수도 없다. 예를 들어 <b><b>recursive b</b></b>는 올바르지 않은 HTML이다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄이며, 형식은 B E TEXT이다.

  • BB는 부분 문자열의 시작 위치(포함), EE는 끝 위치(제외)이고, TEXT는 에디터에 들어 있는 HTML 문서이다.
  • 세 값은 공백 하나로 구분된다. TEXT의 길이를 LL이라고 하면 0≤B≤E≤L0 \le B \le E \le L이다.
  • 마지막 테스트 케이스 다음 줄에는 -1 -1이 주어지며, 이는 입력의 끝을 뜻한다.

TEXT의 길이는 200자를 넘지 않으며, 아스키 코드 값이 32 이상 126 이하인 문자로만 이루어진다. 여는 태그는 항상 <X> 꼴이고, XX는 한 글자 이상이며 a부터 z, A부터 Z, 0부터 9, 그리고 -로만 이루어진다. 문자 <는 오직 태그를 시작할 때에만 쓰인다.

입력으로 주어지는 HTML 문서는 항상 올바르다. 즉 모든 여는 태그에는 대응하는 닫는 태그가 있고 그 반대도 성립하며, 부분 문자열이 태그를 중간에서 끊는 경우도 없다.

출력

각 테스트 케이스마다, BB부터 EE까지의 부분 문자열(EE 위치의 문자는 포함하지 않는다)이 원래 문서에서와 똑같은 서식을 갖도록 앞뒤에 필요한 태그를 추가한 결과를 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    0 15 Testing<b>!</b>
    18 23 <big>100, <bigger>1000, <biggest>10000</biggest></bigger></big>
    4 4 <b>123</b>
    0 16   :-/ :-> :-) :-<-> </->
    -1 -1
    
    예상 출력
    Testing<b>!</b>
    <big><bigger>1000,</bigger></big>
    <b></b>
      :-/ :-> :-) :-
    
  2. 예제 2

    입력
    3 6 <a>XYZ</a>
    -1 -1
    
    예상 출력
    <a>XYZ</a>
    
  3. 예제 3

    입력
    0 11 hello world
    -1 -1
    
    예상 출력
    hello world