페이지를 불러오는 중…
해결한 사람
1
명
정답률
100.00
%
시간 제한
30000
ms
메모리 제한
1024
MB
훌륭한 프로그래머는 멋진 주석을 작성한다. Igor는 프로그래머이며 /* ... */ 블록으로 된 옛 C 스타일 주석을 좋아한다. 그에게는 이 스타일을 Python, Haskell 또는 HTML/XML 문서 같은 모든 프로그래밍 언어나 심지어 문서에도 통일된 주석 형식으로 사용할 수 있다면 이상적일 것이다.
이를 실현하는 일은 Igor에게 그다지 어려워 보이지 않는다. 그에게 필요한 것은 /*로 시작하고, 그 뒤에 주석 텍스트가 오며, 또 다른 */로 끝나는 모든 주석 블록을 제거하는 주석 전처리기이다. 그러면 처리된 텍스트를 그것이 속한 컴파일러나 문서 렌더러가 무엇이든 넘길 수 있다.
하지만 Igor의 전처리기는 그렇게 단순하지만은 않다. 다음은 이 전처리기가 수행하는 몇 가지 멋진 기능이다.
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 인스턴스를 제거한다.
시간 제한: 테스트 세트당 30초. 메모리 제한: 1GB.
입력 프로그램에는 다음 문자만 포함된다.
문자: a-z, A-Z,
숫자: 0-9
문장 부호: ~ ! @ # % ^ & * ( ) - + = : ; " ' < > , . ? | / \ { } [ ] _
공백 문자: 공백, 줄바꿈
작은 입력에는 크기가 2k바이트 미만인 프로그램이 포함된다.
큰 입력에는 크기가 100k바이트 미만인 프로그램이 포함된다.
/*와 */로 된 주석 블록이 있는 텍스트 문서가 주어진다. 입력 파일은 유효하다. 입력 파일은 문제 설명의 text 명세를 따른다. 입력 파일은 항상 줄바꿈 기호로 끝난다.
이 문제에는 테스트 케이스가 하나뿐이다. 먼저 다음 줄을 출력해야 한다.
Case #1:
그런 다음 문제 설명에 명시된 방식으로 모든 주석을 제거한 문서를 출력한다. 주석 바깥에 있는 공백이나 빈 줄은 제거하지 않는다.
//*no recursion*/* file header
***********/************
* Sample input program *
**********/*************
*/
int spawn_workers(int worker_count) {
/* The block below is supposed to spawn 100 workers.
But it creates many more.
Commented until I figure out why.
for (int i = 0; i < worker_count; ++i) {
if(!fork()) {
/* This is the worker. Start working. */
do_work();
}
}
*/
return 0; /* successfully spawned 100 workers */
}
int main() {
printf("Hello /*a comment inside string*/ world");
int worker_count = 0/*octal number*/144;
if (spawn_workers(worker_count) != 0) {
exit(-1);
}
return 0;
}
Case #1:
/* file header
************************
*/
int spawn_workers(int worker_count) {
return 0;
}
int main() {
printf("Hello world");
int worker_count = 0144;
if (spawn_workers(worker_count) != 0) {
exit(-1);
}
return 0;
}
//*no recursion*/* file header */
위 입력은 다음을 생성해야 한다.
/* file header */
/* 또는 /*에 있는 * 문자는 다른 /* 또는 */에서 다시 사용할 수 없다. 예를 들어 다음은 올바른 주석 블록을 NOT 형성한다./*/
Copyright Google LLC; sourced from the Google Coding Competitions Archive.
로그인 상태를 확인하는 중입니다.