E D R , A S I H C RSS

1thPCinCAUCSE

1th Programming Contest in CAUCSE

1회 중앙대학교 컴퓨터공학과 프로그래밍 경진 대회에 대한 자료.



1. 안내

  • 시간: 2002년 10월 26일 9:30 -- 12:30
  • 장소: 7층 PC실
  • 팀 구성: 2-3인 / 팀 당 PC 한대
  • 사용언어: C/C++ with Visual C++ 6.0
  • 문제 성격: 국내 대학생 프로그램 경진 대회의 문제 출제 경향을 따른다. 2002년도 문제 샘플( http://cs.kaist.ac.kr/~acmicpc/problem.html see also 2002년도ACM문제샘플풀이 참조)

  • 경시 주의사항:
    • 팀원이 아닌 사람과 대화 금지
    • 휴대폰, 인터넷 사용 금지
    • 개인 디스켓, CD 등 휴대 금지. 디스켓은 나눠준 것만 사용.

  • 채점 기준:
    • 경시 3시간에 3문제가 출제된다. (open book, closed internet)
    • 팀은 한 문제에 대해 소스코드가 완성되면 디스켓에 담아 채점 팀에 제출한다.
    • 채점은 그 소스코드를 컴파일해서 수행파일을 만들어 채점한다.
    • 그 문제에 대해서 준비된 테스트 데이타( 보통 5-10개)에 대해서 모두 맞는 답을 내야 그 문제를 맞춘 것으로 한다.
    • 프로그램의 실행시간이 일정시간(예: 10초)을 지나도 끝나지 않을 경우 틀린 문제가 됩니다.
    • 컴파일 error, 실행 시간 error , 출력 포맷이 문제에서 정한 것과 다른 경우에도 틀림.
    • 제출한 답안이 틀렸을 경우, 매번 일정한 penalty 점수 (10점)를 받게 된다.
    • 틀린 문제는 다시 제출할 수 있다.
    • 맞춘 문제에 대해서는 경시 시작부터 문제를 제출한 시각까지 시간을 분으로 환산한 것이 점수로 주어진다. (따라서 점수가 적을수록 유리) 그리고 여기에 penalty 점수를 합산한 것이 그 문제의 최종 점수가 된다. 예를 들어, 어떤 한 문제에 대해서 다섯 번째 제출을 시작후 1시간 20분에 하여 맞추면, 지나간 시간이 80분이므로 80점, 네 번째까지는 틀렸으므로 4번*10점=40점이 penalty, 최종 점수는 120점이 된다.
    • 경시 후에도 못 맞춘 문제는 점수가 없다.
    • 각 팀의 최종 성적은 맞춘 문제 수와 점수 합이 된다.
    • 순위는 맞춘 문제의 수가 많을수록 상위, 같은 수의 문제를 풀면 빨리 푼 팀 (즉, 점수 합이 적은 팀)이 순위에 유리합니다.

  • 프로그램 작성시 유의 사항:
    1. 각 문제는 데이터를 외부에서 입력받아서 프로그램으로 답을 계산한 후 반드시 출력을 한다. 이때, 입출력은 표준입출력만 사용한다. 파일 입출력문을 쓰면 안됨.

      예:
      C
      ~cpp 
            scanf ( "%d", &n ); // 표준 입력 부분
            printf ( "I got %d\n", n ); // 표준 출력 부분 
            

      C++
      ~cpp 
            cin >> n; // 표준 입력 부분
            cout << "I got " << n << endl; // 표준 출력 부분 
            

    2. 필요 없는 입출력을 하면 틀린 것으로 채점.
    3. 필요 없는 파일을 생성하거나, 표준입력을 하지 않고 파일 입력을 하면 역시 틀림.
    4. 채점은 자기 컴퓨터에서 하는 것이 아니라, 채점 팀의 컴퓨터에서 실행한다. 이점을 유의할 것. 즉, 자기 컴퓨터에만 있는 특수한 기능을 사용하게 되면, 채점 팀 컴퓨터에서는 안 돌아 갈 수 있음.
    5. 채점 팀은 채점에 필요한 데이터를 파일로 만들어서 가지고 있다가 이를 학생의 수행파일에 파일 redirect를 통하여 수행파일에 입력시킨다.
    6. 모든 문제는 숫자, 영어 문자들을 입력으로 받아서, 역시 숫자나 영어 문자를 출력하도록 되어 있다. 그래픽 출력은 없음.

2. 문제

3. 문제 풀이


4. 대회 자체에 대해

이 대회를 하고, 높은 점수를 받은 팀의 소스 코드를 공개하고 몇 가지 "후속 작업"(예컨대 각 팀의 회고를 포함, 대회에 대한 다큐먼트 위키 문서라든가)을 해주면 아주 많은 것을 배우게 되리 라 생각합니다.

아쉬운 점이라면, 국내 대학생 프로그램 경진 대회와 acm의 icpc를 모델로 하는 듯 한데, 그렇다면 사용언어와 플랫폼 역시 좀 선택의 폭 을 넓게 해주는 게 좋지 않을까 하군요.

이제까지 제가 봐온 대학생 수준의 경진대회 중에서 개발환경과 언어 모두 를 이렇게 한정한 경우는, 특정 회사에서 스폰서를 하는 경우 빼고는 본 적이 없습니다. (최근 정보처리 자격증 실기 시험에서도 모든 언어를 허용하도록 바뀌었다고 합니다) 더 많은 배움의 기회가 될 것인데 참 아쉽군요.

물론 C나 C++을 사용해야만 하는 상황 자체가 하나의 과제 상황이 되고 덕분에 여러가지 공부가 되긴 하겠 지만, 우리는 "왜 C/C++ 밖에 사용할 수 없느냐"는 조금 더 본질적인 질문을 해봐야 합니다. 특히 학과 분위기가 C/C++ 쪽으로 편중되어 있는 상황에서는 말이죠.

혹자는 이런 말을 할겁니다. "사회에 나가서 일하다 보면 자기가 원하는 환경에서 일할 수 없는 상황이 수도 없이 많다. 갑이 까라면 까는거거든." 하지만 이런 상황을 학교에까지 연결할 필요는 없어 보입 니다. 우리는 "교육"과 "학문"이란 걸 하는 것이니까 요.

뭐 어쨌든 C/C++ 밖에 안된다면 또 나름대로 장점으로 돌려 생각하고 열심히 준비하는 것도 의미있겠습니다. 이런 대회가 열렸다는 자체가 귀중한 것이니까요. 앞으로 정기적으로 열리면 학생들에게 많은 동기부여가 되겠습니다.

혹시 여러가지 언어를 수용하는 경진대회가 궁금한 사람은 ICFP 프로그래밍 경진 대회(http://icfpcontest.cse.ogi.edu/ )를 한번 둘러보시기 바랍니다. 눈이 확 뜨일 겁니다. 특히 올해 주제는 로봇 프로그래밍입니다. 무척 흥미로운 주제지요.

제 생각에는 경진대회 문제 은행에서 갓 꺼낸듯한(약간은 천편일률적인) 문제들 외에도 학생들이 좋아할만한 프로그 래밍 주제가 많은데, 그런 것들도 시도해 보면 어떨까 합니다.

수학 경진 대회건, 프로그래밍 경진 대회건 그걸 준비하는 사람들은 매일 비슷비슷한 유형의 문제들만 "최단시간내에" 풀어제끼는 훈련을 하고, 덕분에 어떤 해답 집합을 미리 외우고 있 습니다. 알고리즘 X하면 바로 무의식적으로 손 끝에서 해당 알고리즘을 구현한 모범 답안이 튀어나오게 자신이 프로그램 되어 있죠. 다 좋습니다만, 모든 사람이 그렇게 훈련받을 필요는 없지 않을까요?

저는 영어공부를 하는 사람에게 이런 말을 해줍니다. 영어공부를 하려고 원서를 고를 때에는 일단 그 책을 통한 영어공부의 이득을 무시하고 고려를 해도 여전히 그 책을 읽을 마음이 드는, 설사 그 책이 국어로 되어 있다고 해도 여전히 그 책을 읽을 마음이 드는 그런 책을 보라고 말입니다.

저는 일단은 학생들이 그 주제 자체가 매력적이어서 정말 참여 해보고 싶은 생각이 마구 드는 경우가 이상적이라고 봅니다. 꼭 지적도전을 좋아하는 사람들만이 아닐지라도 "야, 저거 한번 해보면 참 재미있겠다" 그런 생각이 드는 것 말이죠. 그리고 거기에서 각자의 수준에 맞게 저마다 무언가 배우고 얻을 수 있다면 더 좋겠죠.

과 학생들끼리 이런 대회를 주최해 보는 건 어떨까 합니다. 꼭 ICPC 스타일을 답습할 필요는 없겠죠.

--JuNe

5. 전략


C/C++(VC++6.0)만 사용할 수 있는 상황에서는 STL을 사용하냐 안하냐가 엄청난 차이를 불러올 것이라 생각한다. 그리고 팀이 두명이냐 세명이냐도 중요하긴 할 터인데, 어떻게 조직적으로 잘 활용하느냐에 따라 차이가 있기도 하고 별로 없기도 할 것이다. 또한 자가 테스트를 통해 어느 정도 검증된 프로그램만 제출을 할 수 있다면 페널티를 줄일 수 있기 때문에 훨씬 유리할 것이다.

또한 모든 문제에 대해 출제자가 예상하는 해답이 있을 것이고, 올바르게 작동은 하지만 수행시간이 훨씬 더 걸리는(알고리즘의 컴플렉시티가 훨씬 높은) 답안이 있을 터인데, "일정시간" 내에 수행이 완료될 수 있다면 더 단순한 답안을 고를 수 있는 능력도 아주 중요할 것이다. 예컨대, 이번 대회의 예제 문제 B번(http://cs.kaist.ac.kr/~acmicpc/B_word.pdf ) 경우, (아마도) 출제자가 예상하는 답안의 실행 시간이나, 혹은 그렇지는 않지만(꽤 무식한 방법을 쓰지만) 올바르게 작동하는 답안의 실행 시간이나 모두 1초 이내이다. 후자의 방법을 생각해 내고, 프로그램 하는 데에는 보통 전산학과 학생이라면(그리고 그가 STL, 특히 Permutation Generator를 다룰 수 있다면) 5분이면 떡을 치고도 남는다.

--JuNe



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:08
Processing time 0.0501 sec