문서에서 중첩된 /* */ 주석 블록을 왼쪽에서 오른쪽으로 한 번 훑어 지우고 나머지 텍스트를 그대로 출력합니다.
보통4스택문자열시뮬레이션아직 제출이 없습니다시간 제한5초메모리 제한512 MB좋은 프로그래머는 주석을 잘 쓴다. 이고르도 프로그래머이고, /* ... */ 블록으로 쓰는 옛 C 스타일 주석을 좋아한다. 파이썬이든 하스켈이든 HTML/XML 문서든, 모든 언어와 모든 문서에서 이 형식 하나로 주석을 쓸 수 있다면 이고르에게는 그것이 가장 좋다.
이고르가 보기에 이 일은 그리 어렵지 않다. /*로 열고 주석 내용이 이어지다가 */로 닫는 블록을 모두 지우는 전처리기 하나면 된다. 주석을 지운 텍스트는 그 텍스트가 속한 컴파일러나 문서 렌더러에 그대로 넘기면 된다.
다만 이고르의 전처리기는 몇 가지 일을 더 한다.
전처리기가 읽는 주석은 대부분의 프로그래밍 언어에서 괄호가 중첩되듯이 중첩된다. 주석 안에 주석이 들어갈 수 있다. 예를 들어 아래 코드 블록에는 전처리기가 지워야 할 바깥쪽 주석이 하나 있고, 그 안에 주석이 둘 더 들어 있다.
printf("Hello /* a comment /* a comment inside comment */
inside /* another comment inside comment */
string */ world");
전처리를 거치면 다음과 같이 바뀐다.
printf("Hello world");
주석은 텍스트 어디에서나 시작한다. 문자열 "/*...*/" 안에서도, 숫자 상수 12/*...*/34 가운데에서도, 문자 이스케이프 \/*...*/n 안에서도 시작한다.
형식을 갖춰 쓰면 다음과 같다.
text:
text-piece
text-piece remaining-text
text-piece:
char-sequence-without-/*
empty-string
remaining-text:
comment-block text
comment-block:
/* comment-content */
comment-content:
comment-piece
comment-piece remaining-comment
comment-piece:
char-sequence-without-/*-or-*/
empty-string
remaining-comment:
comment-block comment-content
char:
letters
digits
punctuations
whitespaces
전처리기는 주어진 text에서 위 규칙에 맞는 comment-block을 모두 지운다.
/*와 */로 둘러싼 주석 블록이 들어 있는 텍스트 문서가 주어진다. 입력은 항상 올바르고, 문제에서 정의한 text 형식을 따른다. 입력 파일은 항상 줄바꿈 문자로 끝난다.
이 문제의 테스트 케이스는 하나뿐이다. 먼저 다음 줄을 출력한다.
Case #1:
그다음에 문제에서 정한 방식으로 주석을 모두 지운 문서를 출력한다. 주석 바깥의 공백과 빈 줄은 하나도 지우지 않는다.
입력 프로그램의 크기는 100k 바이트 미만이다.
입력 프로그램에는 다음 문자만 들어 있다.
a-z, A-Z0-9~ ! @ # % ^ & * ( ) - + = : ; " ' < > , . ? | / \ { } [ ] _이고르는 주석을 한 번만 훑으며 지운다. 주석 블록을 지운 결과로 새로 생긴 주석 블록은 다시 지우지 않는다. 예를 들어
//*no recursion*/* file header */
는 다음과 같이 바뀐다.
/* file header */
/*나 */에 쓰인 * 문자는 다른 /*나 */에 다시 쓰지 못한다. 예를 들어 다음은 올바른 주석 블록이 아니다.
/*/