Prompt412 운영기(~2022)
마지막 수정 시각: 2022-12-25 12:59:31
Prompt412라는 이름의 알고리즘 문제풀이 스터디를 시작하고 진행해온지 벌써 5년이 넘었다. 2016년 4월 즈음에 처음 시작하게 된 이 모임은 이제는 스터디라는 이름보다는 알고리즘 문제풀이 소모임이라는 이름이 어울린다고 생각하고 운영 방식도 그에 가까운 상황이다. 기억이 더 희미해지기 전에 이쯤에서 한 번 그간의 활동을 정리해두면 좋지 않을까 싶어 가볍게 글을 써 본다. 이미 좀 오래된 일들은 오락가락해서 정확하지 않을 수도 있다.
2016 ~ 2017년
Prompt412는 NEXT에 뿌리를 깊게 두고 있다. NEXT 동기들로 이루어져 있던 단톡방에서 한 분이 coder's high에 참가할 사람을 모집하는 글을 올린 것이 이 모든 것의 시작이었다.
이 이전까지 나는 PS(Problem Solving, 알고리즘 문제 풀이)를 항상 취미 삼아 해오긴 했었지만 제대로 시간을 들여 공부해본 적은 한 번도 없었다. 한국에서 참가 가능한 대회들은 보통 학생들을 대상으로 했고, 그렇지 않은 대회들은 구글 코드잼이라거나 페이스북 해커컵처럼 경쟁의 규모가 너무 거대해서 쉽게 할 엄두가 안 나는 대회들이었다. 고등학교 때는 정보 올림피아드 준비를 하긴 했었지만 그 땐 학교 공부 때문에 PS에 그렇게 많은 시간을 쏟을 수 없었고.
아무튼 Coder's high는 굉장히 드물게 학생, 직장인등 신분을 가리지 않고 참가가 가능한 대회였다. ICPC처럼 3인 1팀으로 진행하는 대회였는데 온라인 예선을 한 번 거쳐서 상위 40팀 정도가 본선에 진출하는 방식이었다. 우리는 next의 자료구조 & 알고리즘 과목 교수님이신 김동진 교수님에 대한 리스펙트를 담아 김동진 교수님 사랑해요라는 팀명으로 참가했었다.
그리고 결과는 예선에서 43등으로 아쉽게 탈락.. 이제 와서 생각해보니 예선 탈락했는데 교수님 얼굴에 먹칠을 한 건 아닌가 싶다.
대회 때 내가 C번을 풀면서 무려 WA를 22번이나 받은 끝에 겨우 풀었는데 여기서 받은 패널티가 너무 컸다. 패널티가 좀 작았으면 진출할만 했는데 그게 너무 아쉽고 마음이 아팠었다. 온라인 예선에서 한 번 이상 제출한 팀이 449팀인데 그 중 43등이니 사실 크게 준비를 안 한 것치고는 잘한 거였지만 그래도 아슬아슬하게 본선에 못 나갔다는게 정말 너무 안타깝고 실력이 부족한 나 자신에게 화가 났다.
그래서 이대로 끝내기 너무아쉬워서 그 때 대회를 참가했던 팀이 그대로 모여서 이 스터디가 시작되었다. 내년 대회에서는 본선에 진출하는 것을 목표로. (하지만 Coder's high가 2016년을 끝으로 더는 열리지 않아 이 팀이 본선에 진출하는 일은 없었다고 한다...)
스터디 이름이 Prompt412가 된 것도 이게 시작이었는데, 대회 당시 우리가 온라인 예선을 참가한 장소가 NEXT 건물에 있는 Prompt4-12 강의실이었다. 대회 이후로도 한동안은 스터디를 그 강의실에서 진행했었고 그래서 스터디 이름도 자연스레 Prompt412로 굳어지게 되었다. 지금 와서 보면 참가자들이 도대체 왜 이름이 Prompt412지? 라고 고민하게 되는 이름이다.
이 때는 흔히 종만북이라고 부르는, "알고리즘 문제 해결 전략(인사이트, 구종만 저)"을 맨 앞에서부터 한 챕터씩 공부해가는 방향으로 진행했다. 그래서 소모임보다는 정말로 스터디라는 이름에 더 어울렸던 것 같다. 스터디는 일주일동안 정해진 챕터의 설명을 읽어본 후, 금요일 저녁 혹은 토요일 오전에 다 같이 모여서 연습 문제를 풀어보는 식으로 진행되었다.
이렇게 몇 개월동안 진행되던 와중에 스터디 참가하시는 분들도 한 분 두 분 늘어나고, 그러면서 중간에 algospot 대회라거나 코드잼이라거나를 같이 참가하기도 하고 그랬다. 2017년 후반까지는 대충 비슷하게 진행이 됐던 것 같다. 그러던 와중에 스터디 멤버도 한 명 두 명 들어오고 나가고 하면서 구성이 완전히 바뀌어서 맨 처음 시작할 때 멤버는 나 혼자만 남게 됐다.
2018년 초
여기서 내가 2017년 초에 구글 코드잼을 광탈하면서 정말 알고리즘 공부에 불이 붙게 됐는데, 이때부터 좀 괴리감이 커졌다. 나 혼자 다른 사람보다 훨씬 많은 양의 공부를 하게 되면서 실력 격차가 벌어지게 되고, 진도도 안 맞고 뭔가 기존 방식대로 스터디를 진행하기가 굉장히 힘들어진 것이다.
이게 그 당시에 내가 했던 연습 로그인데, 매일 풀 문제를 5 ~ 7 문제 정도 정해놓고 무조건 그걸 다 풀었다. 5월 10일부터 10월 말까지 대충 5개월간 이렇게 연습했고, 이 5개월동안 거의 1000문제 가까이 풀었던 것 같다. 코드포스를 처음으로 접하고 시작했던 것도 이때쯤의 일이다.
이렇게 한참 풀고 종만북도 나는 거의 다 진도가 나갔는데 다른 사람들은 아직 진도가 안 나간 상황이라 서로 싱크가 안 맞고, 종만북의 경우 한 번 막히면 스터디 내내 몇시간동안 고민만 하다가 한 문제도 못 풀고 가야하는 경우가 생기다보니 점점 상황이 꼬여 갔다. 나는 스터디에 모여서 뭘 해야할지 애매한 상황이었고, 다른 사람들은 다른 사람들대로 진도가 안 나가니 그건 또 그것대로 답답하고 점점 스터디를 지속할 동기가 떨어지게 된 것이다.
그래서 기존 방식대로 서로 진도도 안 맞고 동기부여도 안 되는 종만북을 계속 붙잡고 있기보다 다른 방식으로 바꾸는게 나을 것 같다는 생각이 들었다. 이 때 나는 한참 코드포스에서 대회에 참가하는 것에 맛들리고 있는 상태였기 때문에 이거랑 유사하게, 매주 모여서 정해진 시간동안 적당히 쉬운 난이도의 셋을 하나 풀고 집에 가면 재밌지 않을까 하는 생각이 들었다.
BOJ의 그룹에서 <연습>이라는 기능으로 이렇게 원하는 문제들을 골라 일정 시간동안 대회처럼 푸는 방법을 제공해서, 이 기능을 이용해서 1시간동안 정해진 문제를 풀고 풀이를 이야기하고 헤어지는 방식으로 바꿔서 진행을 하게 되었다.
그 날 참가자들이 아무도 안 푼 문제면서 적당히 많이 풀린(쉬워보이는) 문제들로 골라서 풀었던 것으로 기억한다. 이 방식 이후로 다른 참가자분들도 이 방식이 더 낫고 재밌다고 하셔서 이런 진행 방식을 중심으로 하게 되었다. 이 즈음부터는 대충 스터디보다는 소모임이라는 이름이 더 어울리지 않나 싶다.
2018년 말 - 확장
그리고 2018년 말부터는 이러한 포맷은 유지하되 주로 사용하는 사이트를 BOJ에서 Codeforces로 옮겨왔다. 옮겨오게 된 제일 큰 이유는 BOJ에서 참가자 모두가 안 푼 문제 중에 적당히 풀만한 난이도의 문제를 선정하는게 굉장히 까다롭다는 것이었다. Codeforces는 대부분의 문제를 안 풀기도 했고, 사이트 자체가 대회를 기반으로 한 사이트다 보니 올라와있는 문제들의 난이도를 판별하기가 비교적 편했다(그 문제가 출제되었던 대회에서 많이 풀렸으면 쉬운거니까).
옮겨온 이후 초기의 기록. 8월 26일에 처음으로 이전해왔다. 그렇게 계속 진행하다보니 이렇게 저렇게 지인의 지인을 타고 참여하게 된 사람들이 많아져서 점점 스터디 장소를 구하는 것에서 어려움을 겪게 되었다.
그러다 Facebook Developer Circle에서 스터디 장소를 제공해준다는 글을 보고 해당 프로그램에 지원해서 2019년 초까지 지원받은 장소에서 비교적 편하게 스터디를 진행하게 됐다.
그리고 이 시기 즈음에 코드포스에서 문제에 난이도를 붙여주는 기능이 추가가 됐는데, 이 기능이 굉장히 유용해서 이때부터는 문제를 정해진 난이도 범위에서 랜덤하게 뽑아서 풀었다. 매 주 거의 비슷한 난이도의 문제 셋을 정할 수 있어서 꾸준히 목표를 정하고(3문제는 풀어야지 같은) 공부를 하는데 정말 큰 도움이 됐다.
스터디 장소 지원이 끝난 이후로는 강남역 코드 스쿼드에서 장소를 빌려 진행하고 있다. 정말 싼 가격에 아주 좋은 시설을 이용할 수 있게 해주셔서 언제나 감사할 따름.
2019년
2019년부터는 거의 진행방식이 고정됐다. 매주 토요일 모여서 같이 코드포스에서 고른 문제를 풀고, 끝나면 적당히 문제 풀이에 대해 토의하고, 밥을 먹고 헤어지는 식. 매주 토요일에 모여서 문제 푸는 것 외의 특별한 활동을 하지 않았기 때문에 부담이 굉장히 적었고 그래서 다들 활동을 편하게 했던 것 같다. 활동을 하는 중간중간 이런 저런 강의 자료도 많이 만들었는데 그런 자료들이 잘 모여있지 않은 것 같아 이 시기부터 노션 페이지를 하나 파서 자료도 정리하기 시작했다.
그런데 그와는 별개로 개인적으로는 모임의 진행이 조금 매너리즘에 빠져 가는 것 같기도 했고, 토요일에 한 번 모여서 한 두 문제 풀고 가는 것만으로는 실력이 늘기 어려운 것 같아서 고민이 많았다. 하지만 모임 구성원이 대부분 직장인이라 무언가 과제를 내주거나 공부를 더 해오라고 시키기도 어려웠고.
게다가 공부에 있어 나는 사람들한테 억지로 무언가를 시키기는 걸 별로 좋아하지는 않는 편이다. 무엇이든 그렇지만 흥미가 붙으면 알아서 열심히 하게 되는 법이고, 억지로 공부를 시키는 것보다는 공부에 흥미를 갖고 지속적으로 그걸 이어갈 동기를 만들어주는게 더 좋다고 생각한다. 그래서 이 모임에서도 억지로 이런거 저런거를 공부하라고 시키기보다는 스스로 공부를 하게 유도하는 방식을 고수했다. 이 시기에 내가 시도했던 컨텐츠는 다음과 같은 것들이 있다.
- 사람들이 흥미를 가질 만한 강의 자료들 만들어서 설명하기: 사람들이 어려워하는 DP에 대한 설명 자료나, 한 번 배워두면 유용하게 써먹을 수 있는 Segment Tree에 대한 설명 등. 그 외에도 쉬운 문제 범위에서 자주 나오는 테크닉인 부분합의 응용에 대한 설명이나 투 포인터, 파라메트릭 서치 등에 대한 설명도 했었다. 몰랐던 알고리즘이나 자료구조를 배우고 그걸로 풀 수 있는 문제들을 풀다보면 재미를 붙일 수 있지 않을까 하는 생각이었다.
- BOJ 그룹에서의 알고리즘별 추천 문제 문제집 구성 : 모임에서 쓰는 BOJ 그룹에 알고리즘별로 BOJ에서 해당 알고리즘을 연습할 수 있을만한 문제들을 추려서 문제집을 만들어두고 사람들이 그걸 푸는걸 장려했다. 강의 자료 만드는 것과 연계해서 설명을 듣고 BOJ에서 문제집에 있는 문제들을 클리어하다보면 흥미가 생기지 않을까 했다.
- Goodbye 대회 : 2019년에 처음으로 시작해서 이제는 매년 전통이 된 소모임 내부 대회. 2인 1팀의 대회로 구성하고 그간 설명한 알고리즘들을 활용해서 풀 수 있는 흥미로운 문제들을 많이 채워넣으면 대회를 하면서 재미를 느끼지 않을까 생각했다. 내가 처음 문제 풀이에 재미를 느꼈던 것도 이런 대회가 계기였기도 했고.
- 주간 연습 문제 구성 : 매주 적당한 난이도의 연습 문제 셋을 만들어서 그 셋에서 문제를 풀 수 있게 하기. 토요일 활동만으로는 실력이 늘기 힘든 것 같아 2019년 중순부터 주간 연습 문제도 같이 운영했다.
- 연습 순위 : 순위표가 있으면 경쟁 심리로 좀 더 열심히 하지 않을까 했다. 그래서 노션에서 순위 페이지를 만들고 주간 연습 문제를 푼 수에 따른 순위표를 만들고, 토요일 연습 라운드 순위도 정리하고 등등의 작업을 진행했다. 이런 기록을 보면 꾸준히 열심히 할 동기가 좀 더 생길 것 같았다.
이런 노력들이 어찌보면 별 것 아닌 것 같을 수 있지만 생각보다 엄청 많은 품이 드는 일이다. 2019년이 개인적으로는 이런 저런 일들이 많아서 굉장히 힘들고 여유가 없었는데, 그러는 와중에 이 모임에서 사람들이 어떻게 하면 좀 더 열심히 공부할까 고민을 하고 있다 보니 어느 순간 좀 피곤하다는 생각이 들었다. 내가 그렇게 시간을 쓴다고 해서 사람들이 그걸 알아주는 것도 아닌데(사실 알아 줄 이유도 없다, 나한테 그런걸 해달라고 한 것도 아니고), 왜 내가 이 모임에 이렇게 책임감을 갖고 계속 시간을 쓰고 있는건지 모르겠다는 기분.
그래서 이걸 그만해야 할까, 생각하다가도 이렇게 오래 지속한 모임이 없어지는 것도 아쉽고 조금이라도 도움받는 사람이 있을텐데 그걸 생각하면 쉽게 놓기가 힘들었다. 내가 모임에서 나가는 순간 모임이 그대로 사라질 것 같았는데 그런 생각 때문에도 더 그만두기가 어려웠고. 모임이 잘 안 굴러간 건 아니지만, 이래저래 혼자 고민이 많아서 속이 좀 탔던 것 같다.
2020년
그런 고민을 안은 채로 2020년 중반까지 모임은 비슷한 형태로 진행됐다. 그 와중에 코로나가 터지는 등의 일이 벌어지면서 모임이 온라인 반, 오프라인 반 섞이게 되기도 했다. 이때까지는 모임에 관련한 이야기를 슬랙으로 나눴는데, 온라인 진행이 많아지면서 디스코드를 쓸 필요성이 대두됐다. 온라인으로 발표나 설명같은 걸 하려면 아무래도 디스코드의 음성 채팅이 편한 부분이 많았기 때문이다.
이쯤 이래저래 모임에 좀 변화가 필요하다는 생각이 들었다. 개인적으로 모임을 진행하는 것에 가지고 있는 부담감이나 고민들도 좀 얘기를 해보고, 어떤 방향으로 모임을 진행하는게 내 개인적인 부담도 좀 덜하면서 사람들 실력 향상에도 도움이 될까도 토의해보고.
그래서 디스코드 전환과 함께 당시 모임 구성원들과 이런저런 모임 변경안을 얘기했는데, 아쉽게도 그 안들은 2021년이 다 넘어가도록 적용되지 못 했다. 코로나가 아니었으면 좀 더 일찍 시도를 해봤을텐데, 코로나 때문에 그 토의에서 이야기했던 방안들을 대부분 적용할 수 없는 상황이 되어 계속 비슷한 방식의 진행을 할 수 밖에 없게 됐다. 아쉬운 일이다.
그래도 그런 토의를 하고 개인적으로 갖고 있던 고민에 대해서도 좀 터놓으면서 마음이 한결 편해졌었다. 2020년에는 회사를 퇴사하고 좀 여유가 많이 생기면서 모임 활동을 준비하는 과정에서 가지는 부담도 적어졌고.
이 때쯤 토요일 모임에서 문제 풀던 활동을 코드포스에서 BOJ로 옮겨왔다. 문제 난이도 판단 때문에 코드포스를 쓰던게 컸는데, solved.ac 서비스가 굉장히 활성화되면서 문제 난이도를 따지기가 쉬워져 굳이 활동을 코드포스에서 진행할 메리트가 없어졌기 때문이다.
그래서 토요일 문제 풀이 모임과 주간 문제 풀이 활동을 모두 BOJ에서 진행하고, 2020년도 2019년과 비슷한 방식으로 모임을 계속 이어갔다. 그 와중에 했던 큰 작업 중 하나는 자체 OJ를 구성한 일이다. 내부 활동에서 만든 문제가 좀 많이 쌓이기도 했고, 2020년 연말 대회에서 내고 싶었던 양식의 문제를 코드포스에서는 쓸 수가 없어서 큰 맘 먹고 만들었다. 지금까지도 잘 쓰고 있고 여러가지로 내부 활동을 진행할 수 있는 폭이 넓어져서 만들길 잘 한 것 같다.
2021년
2021년부터는 오프라인 모임을 거의 지속할 수 없는 상황이 돼서 사실상 대부분의 활동이 온라인으로 진행됐다. 이러다보니 사람들 동기부여가 떨어지는게 눈에 보여서, 개인적으로 다시 좀 고민이 많았다. 어떻게 하면 온라인으로 문제를 푸는 와중에 사람들이 좀 열심히 할 수 있을까? 싶은 생각이 들어서.
일단 원래 하던 주간 문제 풀이 활동이 그다지 사람들의 참가도가 높지 않은 것 같아서, 일주일 단위로 문제를 추천하기보다는 비교적 쉬운 문제를 포함해서 매일매일 문제를 추천하는게 낫지 않을까 싶은 생각이 들었다. 그래서 "오늘의 문제 추천" 디스코드 봇을 만들어서 이 봇을 통해 사람들이 문제를 풀 게 하려고 했다.
위와 같은 방식으로, 매일 난이도 별로 하나씩 문제를 뽑아서 추천해준다. 그리고 디스코드에 "문제풀이인증" 채널을 만들어서 이 채널에서 문제를 풀고 풀었다는 글을 써서 서로서로 동기부여가 되게 했다. 문제를 풀고, 풀었다고 쓰고, 사람들이 이모지 리액션으로 칭찬(?)해주고, 남들이 푸는 걸 보면서 나도 풀어야지 생각이 들고.
그래서 이런 식으로 사람들이 매일매일 문제를 풀었다는 글들이 디스코드에 올라오는데 이 시스템은 비교적 잘 동작하고 있는 것 같아서 마음에 든다. 최근 들어 좀 열심히 하시는 분들이 많이 늘어나기도 했고. 이런 활동을 하다가 소모임에서 누군가 풀만한 문제를 추천해달라고 해서 실버, 골드에서 개인적으로 좀 재밌게 풀었던 문제를 각각 100개씩 뽑아 문제집을 만들었는데(실버 100제, 골드 100제), 이러다보니 문제 푼 현황을 좀 쉽게 볼 수 있고 동기부여가 될만한 사이트가 있으면 좋을 것 같아 문제 풀이 현황을 확인하는 사이트도 하나 만들게 됐다. 만드는 김에 사이트에서 오늘의 문제 추천 역대 기록도 같이 관리. 개인 공부용으로도 잘 쓰고 있어서 아주 만족스럽다. 이 사이트는 나는 백엔드만 작업하고 프론트엔드는 소모임 구성원 한 분의 도움을 받아 만들었는데 혼자 작업했다면 만들다 또 흐지부지됐을 것 같다. 도와주신 구성원 분에게 감사할 따름.
아무튼 이런 과정을 거쳐 2021년까지 꽤 긴 시간동안 형태와 컨텐츠를 이리저리 바꿔가며 그래도 모임이 나름대로 성공적으로 운영되고 있는 것 같다. 여전히 생각하고 있는 여러 문제점과 부족한 부분이 있는데 한 번에 많은 걸 바꾸긴 어려우니 차근차근 진행해야지 생각하고 있다. 지금 생각하고 있는 개선해야 할 것 같고 준비해야 할 것 같은 부분은 이런 것들이 있다.
- 연차가 쌓이고 모임 구성원 수가 늘면서 모임에 참여하는 사람들의 실력도, 지식도, 목표도 편차가 너무 커졌다. 각 구성원들이 본인이 목표하는 바와 현재 수준에 맞춰 적절한 공부 방법과 컨텐츠를 쉽게 얻을 수 있었으면 좋겠는데 지금 준비된 자료와 그 구성 형태가 이걸 충분히 만족하지 못하고 있는 것 같다. 특히, 입문자 입장에서 차근차근 밟아나가면서 공부할 수 있는 자료가 제일 필요한 상황인 것 같아 내년에는 기존에 작업해둔 사이트와 자체 OJ를 이용해 이런 자료를 최대한 보충하려고 생각 중이다.
- 구성원 수에 비해 디스코드 활동이 좀 뜸하다. 특히 개인적으로는 질답이 좀 활발하게 이루어졌으면 좋겠는데, 여러모로 좀 저조한 느낌. 공부 방법이든 알고리즘에 대한 질문이든 문제를 풀다 막힌 부분이든 여러가지로 질문을 하고 추천을 하고 이것저것 교류가 많으면 그만큼 동기부여도 되고 실력도 빨리 는다고 생각하는데 이게 잘 안 되는 것 같다. 오프라인 모임을 할 수가 없는 상황이 지속되면서 사람들끼리 친해지기 어려워서 그런 것도 큰 것 같다. 나도 뭔가 얘기하고 싶어도 아 내가 이런거 얘기하면 너무 오지랖아닌가? 싶어서 말하기 힘든 경우도 종종 생기고. 코로나로 인한 온라인 모임이 지속되는 건 어쩔 수 없지만 그러는 와중에라도 좀 더 분위기를 풀고 적극적으로 활동할 수 있는 방법이 있을지 고민해봐야 할 것 같다고 생각하고 있다.
- 모임에서 내가 너무 많은 걸 혼자 하려고 하는 것 같은 상황인데 좀 더 분배를 하고 싶다. 원래는 이런저런 방안이 나왔었지만 코로나 때문에 흐지부지됐으니 다시 한 번 고민이 필요할 때인 것 같다. 어떻게 하면 좋을진 좀 생각이 필요할 것 같은데 뭐 최근엔 내가 여유로운 상황이니 느긋하게 생각해보면 되지 않을까 하는 중.
어쨌든, 벌써 토요일 모임 정규 문제풀이도 133회가 넘었고, 긴 시간동안 "부담없이 취미로 문제를 푸는 모임"이라는 개인적인 목표에 맞춰 그래도 차근차근 잘 운영은 했던 것 같다.
2022년
거의 온라인으로만 진행됐던 2021년과는 달리, 어느정도 코로나가 잠잠해지면서 오프라인 반, 온라인 반 정도로 진행이 됐다. 꾸준히 참여해주시는 분들이 어느 정도 고정되면서 이 분들 위주로만 돌아간 느낌은 좀 있는 것 같다. 22년 초에는 개인적인 코칭을 좀 진행해보기도 했고 활동도 좀 활발하고 그랬는데, 22년 중순 ~ 말로 오면서 전반적인 활동 자체는 많이 뜸해졌다. 그래도 다들 꾸준히 토요일 모임은 참석해주셔서 막 모임이 잘 안 돌아간다는 느낌은 아니었던 듯.
16년부터 시작해서 약 7년동안 모임을 거의 관리하는 역할을 맡았는데, 내년에는 경기권을 떠나 이사를 하게 돼서 오프라인 모임 담당은 다른 분에게 넘겨드렸다. 오프라인 모임에 꾸준히 참가하는 인원수가 많이 줄게 되어서 내년에 과연 잘 유지가 될까 하는 걱정이 있긴 하지만...