ICPC Sinchon 2022 Summer Algorithm Camp 강의 후기

서론

신촌지역 대학교 프로그래밍 동아리 연합 캠프에서 알고리즘 강의를 했습니다. 지금까지 강의 후기는 한 번도 안 적어봤는데 이번에는 적으면 몇 명 선정해서 상품을 준다고 해서(…) 적어보려고 합니다.

ICPC Sinchon 관련 이야기

이전에도 ICPC Sinchon과 함께 일을 한 적이 있습니다. 2년 전 여름, shiftpsh님의 제안으로 ICPC Sinchon의 첫 대회인 SUAPC 2020의 검수진으로 합류하게 되었습니다. 그때 당시에 처음 만들어진 연합임에도 불구하고 운영이 매끄럽고 대회 퀄리티도 좋았던 것으로 기억합니다. 그 뒤로도 대회 검수 요청이 몇 번 오긴 했지만 시간이 안 맞아서 ICPC Sinchon과는 연이 닿지 않았습니다.

저는 보통 1주일에 한 번 정도 BOJ 홍보 게시판을 확인합니다. 게시판을 둘러보던 도중 ICPC Sinchon 강사 모집 글을 보았고, 무급으로 일하는 숭실대 동아리보다는 낫다는 생각에 지원을 했습니다. 지원할 때 강의 영상을 제출해야 하는데 이건 몇 달 전에 SCCC에서 강의했던 영상을 제출했습니다. 영상을 보고 판단한 건지 BOJ 핸들을 보고 판단한 건지 모르겠지만, 아무튼 강사 합격 연락을 받게 되었습니다. 제출한 영상이 별로 마음에 드는 영상은 아니었는데 좋게 봐주신 것 같습니다.

강의 구성

이번 캠프는 초급반과 중급반으로 나눠져 있었으며 저는 jjaewon9와 함께 중급반을 맡았습니다. 커리큘럼은 제가 직접 구성했습니다. 캠프 운영진 측에서 과거 캠프 커리큘럼을 제공해 줬는데, 너무 사전 지식을 가르치는 것에 치우친 것 같아서 처음부터 다시 짰습니다. 구성은 다음과 같습니다.

  • 기본기 훈련
    • 분할 정복
    • 세그먼트 트리
    • 모노톤 큐/스택
    • DP 1 (위상정렬, 트리, 구간, 기댓값 등)
    • DP 2 (그리디+DP, 게임이론, 자료구조 등)
  • 다양한 주제 찍먹
    • 기초 정수론 (확장 유클리드, 페르마 소정리, 중국인의 나머지 정리 등)
    • 트리 (오일러 투어 테크닉, 스파스 테이블, LCA)
    • 그래프 (DFS Tree, SCC, 2-SAT)
    • 문자열 (해싱, 트라이, KMP)

사전 지식은 쉽게 공부할 수 있고, 수강생들의 평균적인 실력을 봤을 때 Network Flow나 Sprague Grundy Theorem 같은 어려운 사전 지식을 가르칠 필요는 없을 것 같아서 solved.ac 기준 알고리즘 기본 티어가 플래티넘 3 이상인 내용은 모두 배제했습니다. 대신 기본적인 내용을 잘 활용할 수 있도록 내용을 구성하는 데 초점을 맞췄습니다.
하지만 사전 지식을 안 가르치고 문제 풀이만 계속 시키면 재미없을 수 있기 때문에, PS의 다양한 토픽(수학, 그래프 이론, 문자열 등)을 공부할 때 기본이 되는 내용도 몇 개 추가했습니다. 기하도 넣고 싶었지만 시간이 안 돼서 넣지 못했습니다.
이렇게 열심히 고민해서 만든 커리큘럼인데 수강생분들께 제 의도가 잘 전달되었는지는 모르겠습니다.

원래 위에 있는 순서로 진행하려고 했지만 조금 달라졌습니다. 캠프 운영진 측에서 두 강사가 홀수 번째 회차와 짝수 번째 회차로 나눠서 진행하라고 해서 순서를 조금 수정했습니다. 최종적으로 확정된 커리큘럼은 ICPC Sinchon 공식 사이트에서 확인할 수 있습니다.

강의 준비

ICPC Sinchon 외에도 삼성전자, SSAFY, 선린인터넷고등학교, 숭실대학교 등 여러 곳에서 강의를 했었고, 강의를 하면서 만든 자료가 많이 쌓여 있습니다. 사실 강의 자료 재탕하면서 날로 먹을 생각으로 강사 지원을 했지만… 예전에 만든 자료가 마음에 들지 않거나 처음 강의하는 내용이라서 대부분의 슬라이드를 새로 만들게 되었습니다.

매 회차 슬라이드를 만드는 데 12시간 이상 걸렸던 것으로 기억합니다. 강사비가 회당 7만원이었으니까… 최저 시급의 절반만 받으면서 일한 것 같습니다. 한 번 쓰고 버리는 건 너무 아까우니까 나중에 재탕할 일이 생겼으면 좋겠습니다. 자료는 여기에서 확인할 수 있습니다.

강의

1~2달밖에 안 지났는데 벌써 기억이 가물가물해서 어떤 일이 있었는지만 간단하게 적습니다.

1회차 - 분할 정복 (7/5)

운영진 측에 강의를 7/5에 진행한다고 연락했지만 어찌 된 일인지 수강생들에게는 7/8이라고 공지되었습니다. 일정이 잘못 공지했다는 것을 강의 시작 15분 전에 깨달아서 상황도 어수선한데, 운영진은 “강사 개인 사정으로 일정이 변경되었다” 라고 공지를 하며 제 탓으로 돌리길래 화나서 때려치고 싶다는 생각이 들었습니다. 결국 저는 7/5에 강의를 진행하고 7/8에 강의 영상 녹화본을 제공하는 것으로 마무리되었습니다.

원래 이 내용은 재귀 파트와 분할 정복 파트가 별개의 강의로 설계되어 있었지만 ICPC Sinchon에서는 한 강의에서 모두 다뤄서 강의가 조금 길어졌습니다. 그래도 수강생분들이 PS를 어느 정도 공부했던 분들이라 잘 따라오신 것 같습니다.
다양한 이야기를 했지만 결국 모든 이야기는 재귀함수 = 귀납법이라는 이야기로 귀결됩니다. 똑같은 말을 1시간 20분 동안 했는데 지루하지 않았을지 걱정됩니다. 속도가 조금 빨랐다는 피드백을 들었습니다.

3회차 - 모노톤 스택/큐 (7/22)

모노톤 큐를 사용하는 좋은 문제들은 대부분 DP와 엮여 있어서 문제를 고르는데 어려움이 있었습니다. 모노톤 스택도 맨날 나오는 오큰수, 히스토그램 말고 다른 문제를 찾기 위해 열심히 뒤졌습니다. 3회차는 문제를 고르기 어려웠던 것이 가장 기억에 남습니다.

1회차는 줌, 3회차는 유튜브 스트리밍으로 진행했는데 유튜브는 딜레이가 너무 심하다는 피드백을 들었습니다. 5회차부터 계속 줌을 사용했습니다.

5회차 - 정수론 (7/29)

강의를 하려고 했는데 집 에어컨이 고장 나서 급하게 스터디 카페를 예약해서 강의를 진행했습니다.

평소에 정수론 관련 알고리즘은 블랙박스로 써와서 강의 자료를 만들면서 같이 공부했습니다. 덕분에 지금은 원리를 이해해서 팀노트 없이 짤 수 있습니다. 역시 최고의 공부 방법은 강의인 것 같습니다.

7회차 - 문자열 (8/5)

1~5회차는 예전에 선린에서 강의했던 자료가 조금씩은 남아 있어서 설명 순서를 구성하는 노력은 안 해도 됐는데, 문자열은 아예 처음 하는 파트라서 강의 준비하는 데 훨씬 오래 걸렸습니다. 그리고 트라이 그림 그리는 것과 해싱 파트에서 파워포인트 수식 입력하는 것도 너무 귀찮았습니다.

오토마타 관련 내용을 배제하고 직관에 의존해서 KMP를 이해시키기 위해 노력했는데 수강생분들이 잘 이해하셨을지 모르겠습니다. 강의 도중에 질문이 없는걸 보면 잘 이해한 게 맞겠지?

9회차 - 그래프 이론 (8/12)

목이 아파서 슬라이드만 업로드하고 실시간 강의는 진행하지 않았습니다. 이 파트도 예전에 사용했던 자료가 없어서 슬라이드를 만드는 데 오래 걸렸습니다.
강의 자료 만들 때 주제를 착각해서 10회차 자료도 함께 만들었습니다. 깃허브 레포에 10회차 슬라이드가 있는 이유입니다.

11회차 - 문제 풀이 (8/19)

마지막 회차는 지금까지 배운 내용을 이용해 다양한 문제를 풀어보는 시간입니다. 제가 좋아하는 문제들을 푸짐하게 넣을 수 있는 유일한 기회라서 마음껏 넣었습니다. 강의할 때도 신나서 떠들다 보니 2시간이 훌쩍 지나 있었습니다. 풀이만 대충 설명하는 것이 아니라, 어떤 사고 과정을 거쳐서 풀이를 냈는지 설명하는 것에 초점을 맞췄습니다.

Camp Contest

Camp Contest는 참가하지 않으려고 했지만 강사로서 참가하는 게 예의일 것 같아서 Open Contest에서 몇 문제 풀었습니다. 그냥 풀면 재미없을 것 같아서 뒤에서부터 풀기 시작했는데 3번째 문제에서 first solve를 뺏겨서 그만뒀습니다.
흔히 웰노운이라고 부르는 기법들이 많이 출제된 educational한 대회였습니다. 최근에 누가 “기본기 = 쉽고 뻔한 문제를 쉽고 뻔하게 푸는 능력” 이라고 이야기하는 걸 들었는데, 이 말을 생각하면 캠프 목적에 딱 맞는 대회인 것 같습니다.

SUAPC

Open Contest는 귀찮아서 참가 안 하고 나중에 버추얼 형식으로 풀었습니다. 본대회 1등팀이 11문제 풀었길래 혼자서 1등팀 이겨보려고 열심히 풀었지만 아쉽게도 이기지 못했습니다. E 풀이를 너무 늦게 찾은 게 원인인 것 같습니다.

마무리

개인적으로 강사 2명일 때 홀수 짝수 회차 제한이 있는 게 불편했습니다. 모집할 때부터 미리 공지하거나 정해진 횟수 안에서 자유롭게 조절할 수 있으면 좋을 것 같습니다. 그리고 차시 당 7만원은 강의 준비 시간까지 포함하면 최저 시급 절반밖에 안 되는 너무 적은 금액입니다. 다음 캠프부터는 강사비를 늘리면 더 좋지 않을까… 생각합니다.

어떻게 끝내야 하지?