주석은 전부 무시해 (Large)
시간 제한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-Z - 숫자:
0-9 - 문장 부호:
~ ! @ # % ^ & * ( ) - + = : ; " ' < > , . ? | / \ { } [ ] _ - 공백 문자: 공백, 줄바꿈
힌트
-
이고르는 주석을 한 번만 훑으며 지운다. 주석 블록을 지운 결과로 새로 생긴 주석 블록은 다시 지우지 않는다. 예를 들어
//*no recursion*/* file header */는 다음과 같이 바뀐다.
/* file header */ -
/*나*/에 쓰인*문자는 다른/*나*/에 다시 쓰지 못한다. 예를 들어 다음은 올바른 주석 블록이 아니다./*/