포큐아카데미: 알고리듬 및 자료구조 COMP3500 수료 실패 후기
COMP3500 수강 동기
알고리듬 코딩을 처음 접했던 사건은, 본인이 대학 신입생 시절부터 활동했던 동아리에서 선배들에게 C언어 스터디 멘토링을 받으면서였다. C언어의 문법과 표준입출력 함수의 사용법을 배우고 실전 문제를 풀어서 알고리듬 저지 사이트에 제출하는 방식으로 스터디는 진행됐다.
맑고 순수했던 새내기 시절 나는, 내가 만든 코드를 제출하면 컴퓨터가 알아서 채점을 해주는 것이 신기했다. 그래서 개인적으로 시간이 날 때마다 아무 문제나 골라서 풀었다. 물론 내가 어려워하는 문제들은 바로 스킵했다. 처음엔 생초보니 그렇게 해도 괜찮았지만, 점점 이게 나쁜 습관으로 고착화돼 나중에 화근이 된다.
그 저지 사이트는 문제를 풀 때마다 그 개수를 기준으로 유저의 랭킹 순위를 결정한다. 그래서 이 플랫폼에서 내가 이룰 목표는 단지 하나였다. 문제를 많이 풀어서 레벨을 올리는 것이다. 게임 용어로 말하자면 랭작(랭크작업)과도 같다. 시간이 지나 군대에서도 無지성 상태로 랭작을 열심히 했다. 미리 문제 페이지를 프린터로 출력해서 가져다가 시간이 날 때마다 문제를 읽고, 손코딩을 했다. 이외에도 code golf(숏코딩)에 관심이 있던 터라, 루비언어로 문제를 풀기도 했다. 숏코딩 순위권에 들기 위해, 코드 길이를 1바이트라도 줄이려고 온갖 잔머리를 굴렸던 기억이 난다.
- 1000 문제를 달성한 순간. 지금은 존재하지 않는 계정. (2020년 01월 26일)
그렇게 꾸역꾸역 시간을 투자한 결과 마침내 목표로 했던 1000문제를 달성할 수 있었다. 그리고 곧 “내가 그동안 인생을 헛되이 보내지 않았구나”, “알고리듬을 열심히 공부했구나” 등의 정신승리와 망상을 했다. 실체는 문제 개수 레벨만 높은 상태에서 문제 난이도 레벨이 낮은 몬스터들만 주구장창 잡은 꼴이다. 당연히 문제풀이 실력이 좋을 리 없다. (대신 입력 스트림 데이터를 자료구조에 넣는 실력은 많이 늘었다.) 내 실력은 C++ STL를 사용한 문제풀이, 쉬운 유형의 DFS/BFS 문제풀이만 할 수 있는 수준으로 그쳐있었다. 랭작에 회의감을 느끼기 시작하면서 나는 저지 사이트의 계정을 탈퇴했고, 그 이후로 기업 코딩 테스트 준비할 때 제외하고는 더이상 알고리듬 풀이를 하지 않았다. 마침 예전 블로그에 일기를 썼던 게 있어서 가져왔다.
제목: ** 탈퇴
날짜: 2020년 5월 17일
** 사이트를 탈퇴했다.
항상 그랬듯이 높은 레벨 문제는 풀기 싫고, 낮은 문제만 풀다가 어느 순간 정이 식어갈 무렵,
다시 생각했다. 내가 **을 하는 이유가 뭐였을까?
아무리 생각해도 문제 수 랭킹 올리기밖에 없었다.
그 랭킹 올린다고 누가 알아주는 것도 아닌데, 왜 이리 랭킹에 목숨을 걸었는가 싶었다.
안 풀면 랭킹이 내려갈까 봐 불안했다. 그럴 때마다 **을 풀었다.
이제 랭킹 욕심을 버리니 목표가 없어졌다. 애초에 대회를 준비하는 것도 아니고,
알고리듬 테스트를 당장에 준비하는 것도 아니라서 현타를 느끼고 계정을 지웠다.
1000 문제가 넘는 풀이 코드들이 순식간에 사라져서 아쉽기도 했지만, 그러면 뭐하나.
이미 푼 코드 찾아서 읽어볼 것도 아니고 그런 코드는 언제든지 작성할 줄 알아야 하는게 더 중요한데.
github에 올린 솔루션 코드 저장소도 몇 개 있었는데 모두 지웠다.
커밋 현황을 보니 꾸준히 심었던 잔디밭이 반절 이상 뽑혀나갔다.
아.
내가 정말 많은 시간을 낭비했었구나.
동시에 후회가 남는다.
쉬운거 풀지 말고, 어려운 문제를 참고 풀었었더라면..
COMP3500을 수강신청할 무렵엔 이미 학교에서 자료구조와 알고리듬 과목을 이수한 상태였다. 두 과목의 성적은 좋은 편이었지만, 마음 한켠에는 불안함이 남아있었다. 마지막 파트에서 나오는 Dynamic Programming, Graph 등의 문제들만 보면 머리속이 새하얘지고, 자신감이 급격히 내려갔다. 마치 트라우마에 걸린 것처럼. 나는 원인을 명확히 알고 있다. 개념을 알고 있다고 착각하거나, 그 분야의 문제를 거의 안 풀어서 그런 것이다. 그렇다면 원인을 알았으니 해결해야 하는데, 그 과정을 정면으로 부딪히지 않고, 고통스러울까봐 걱정만 했다.
적고나니 부끄럽지만, COMP3500을 수강한 이유는 요행을 바라기 위함이었다. 이번 기회에 제대로 개념을 잡자고 다짐했건만, 현실은 수료 실패라는 결과를 받을 뿐이었다.
수료 실패
COMP3500 수강 신청 전에, 첫 학기로 수강했던 분들의 후기들을 읽었다. 그중 수료에 실패했던 분이 있어서 결코 만만치 않은 수업이 되겠거니 했는데, 겪어보니 정말 그렇다. 중간고사 전까지만 해도 잘 따라왔는데, 이후 체스게임과 그래프 문제들을 겪으면서 절망에 빠졌다. 사실은 중간고사가 끝나고 수강 철회를 할까말까 고민이 많았다. 여기까지 왔는데 버리긴 아깝다는 생각에 계속 듣기로 감행한건데, 결국 안 좋은 꼴이 됐다.
- 체스게임 과제: 비유하자면 공룡만한 크기의 하얀 도화지를 받고, 그림을 완성하라는 지시를 받았을 때의 느낀 충격과 그로 인한 멍해지는 듯한 기분이었다. 레드블랙트리를 배울 때 경우의 수의 함정에 빠질 수 있다는 내용이 있는데, 여기서도 그런 느낌을 받았다. 틱택토 미니맥스 알고리듬 코드를 봐도 이해를 잘 못했고, 결국 간단한 조건 처리만 한 채 제출하고 말았다.
- 그래프 과제: 문제 명세를 제대로 이해하지 못했고, 따라서 어떤 알고리듬을 적용할 지도 감이 안 잡혔다.
배점이 높은 과제에서 점수를 못 따니까, 기말고사를 아직 보지도 않았는데 미리 내 점수가 커트라인 85점을 넘는지 계산하는 나를 발견했다. 못 넘는걸 직감하고 나니 쉽사리 의욕저하로 이어졌다.
내 지극히 구차하고 개인적인 변명이지만, 수강 기간동안 스케쥴을 제대로 소화하지 못했다. 처음엔 몰랐는데, 시간이 지나면서 몇몇 스케쥴을 넘기지 못하고 토를 했다. 학교 수업은 과도하게 많은 학점을 들었고, 모든 수업이 비대면인줄 알았지만 몇몇 과목이 중간에 대면으로 전환돼 애를 먹기도 했다. 심지어 과제와 대회를 위해 정신없이 프로젝트 개발, 발표 슬라이드 제작, 그리고 동영상 촬영을 하느라 시간도 없었다는 핑계를 감히 대본다. 그러다보니 포큐가 우선순위에서 뒤로 계속 밀려나가고 있었다. 그렇게 기말고사까지도 공부를 안 한 채로 응시했고, 뻔하게도 결과는 망치고 말았다. 너무 내 욕심이 과했던 것 같다. 포큐 과목은 역시 여유시간이 충분할 때 듣는 것이 맞는 듯하다.
느낀 점
- 알아두어야 하는 알고리듬의 주제 목록들을 구체화할 수 있었다.
- 슬라이드가 알고리듬을 따라 한 걸음씩 진행되는 모습을 명확히 보여준다. 그 정도로 슬라이드 제작에 엄청난 시간과 노력이 들어간 것이 보인다.
- 실습/과제 시 라이브러리 사용을 제한하여 대신 직접 구현을 유도하는 점이 좋았다.
- 해시 알고리듬과 암호화/복호화에 대한 심층적인 설명이 나온다. 보안에 관심이 있는 분들이라면 재밌게 볼 수 있을 것이다.
- 개인 역량에 달린 것이라고 생각하는데, 본인의 경우에는 어떤 알고리듬을 이해하지 못해, 직접 짜기보다는 인터넷에 돌아다니는 코드를 가져다 바꿔쓰는 일이 있었다. 이 경우 완전히 내것으로 만들지 못한 것이 아쉬웠다.
- 노드를 순회할 때 사용하는 visited와 discovered의 미묘한 차이점을 느꼈다.
- 수료는 실패했지만, 각종 알고리듬의 특징을 제대로 숙지하고 톺아본 다음, 전보다 더 진지하게 풀이에 임하겠다는 다짐을 가졌다.
수강 점수
- 실습: 25%
- 과제: 6.25% + 6.25% + 1.3125% + 2.0625% = 15.875%
- 중간고사: 19.25%
- 기말고사: 7.75%
- 총점: 67.875% < 85% (FAIL)
글 잘 읽었습니다. 이 곳에 블로그가 있었군요... 저도 알고리즘의 고수가 되고 싶습니다. 화이팅입니다....
답글삭제