나의 CS 스토리

원래 어렸을 때 부터 수학을 잘했다. 계산도 빨랐고 학원에서 하는 영재 테스트 같은 것에서도 늘 좋은 성적을 거뒀던걸로 기억한다. 그래서 자연스럽게 초4때부터 영재교육원에 들어가고, 와이즈만이라는 학원도 다니게 되었다. 그러다가 초5때 학원에서 소수로 등차수열을 만드는 문제를 만나게 되었다. 소수로 등차수열을 만들려고 하면 그 등차수열에 항이 많으면 많을수록 등차의 조건이 까다로워져 항을 많도록 하는 것이 어렵다는 뭐 그런 내용이었는데, 수업 시간에 계차수열로 만들어보니 항이 아주 길게 이어졌다. 집에 와서 직접 보니 초항이 11/41/47일 때 계차가 2,4,6,8,... 인 계차수열이 각각 10/40/46개의 소수로만 이루어진 항으로 구성되었다. 굉장히 신기해서 이를 가지고 확인해보고 싶은게 많았는데, 그러려면 일단 소수 목록이 필요하니 인터넷에 소수 목록을 검색했다. 그러다가 C언어로 만든 프로그램이 소수 목록을 쭉 출력해주는걸 알았고, 그걸 계기로 C언어를 공부하게 되었다. 독학은 아니었고 조그만 컴퓨터학원에서 한 달인가 두 달정도 짧게 언어만 배웠다.


그 이후로 한과영에 합격하기 전까지 프로그래밍은 그냥저냥 재미로 하는 정도였다. 자료구조/알고리즘을 따로 배운건 아니었어서 그냥 재미삼아 C언어를 가지고 getch(), kbhit() 같은 함수로 텍스트 기반 게임을 만들어보려고 했다. 중학교 내신이 엄청 뛰어난건 아니었고 또 과학을 거의 내려놓다시피 했는데 다행히 한과영에 합격했고, 발표가 보통 7월달 쯤에 나니까 고등학교에 들어갈 때 까지 한 학기 정도가 굉장히 여유로운 상황이었다. 그 시기에 어쩌다가 지금은 문을 닫은 hack-me.org라는 워게임 사이트를 알게 되었고 리눅스/버퍼 오버플로우 등의 공격기법에 대한 지식은 전무했지만 인터넷으로 열심히 풀이를 찾아가며 조금씩 풀었다. 수학, 특히 암호학에 이전부터 관심이 많았지만 워게임 사이트를 풀면서 굉장히 큰 재미를 느끼고 보안 분야로 나갈 생각을 했던 것 같다.


한과영에는 PT라는 제도가 있어 입학 전에 시험을 쳐 1학년 과목을 굳이 듣지 않아도 될 정도의 성취도를 보인 학생들에게는 과목을 듣지 않아도 학점을 인정해주고 상위 과목을 듣게 해주었다. PT를 통해 프로그래밍 1/2 과목을 면제받았고 바로 컴퓨터과학이라는 과목을 들었다. 그리고 이 과목은 정말 말도 안되게 어려웠다. 원래 과목의 의도는 넓고 얕게 배우는 것이었는데, 넓고 깊게 들어가서 P-NP를 다루고, Kuratowski's Theorem을 증명하고 하는 등 어마어마했다. 그래서 썩 잘하지는 않았는데 그래도 그냥저냥 재미는 있었고 또 선생님이 1학년이라고 배려를 많이 해주셨다.


고1때 까지만 해도 알고리즘/자료구조 지식이 굉장히 부족했다. 스택/큐도 몰랐다. 지금도 기억하는게, 2013년 지역본선 1번 토마토 문제를 $O(N^2M^2)$으로 풀었다. 당연히 지역본선에서 광탈이었다. 고2때부터 알고리즘/자료구조 과목을 학교에서 듣게 되었고 그 때 자연스럽게 자료구조/알고리즘 지식을 배우게 되었다. 그런데 이 쪽에서는 큰 재미를 느끼지 못했다. 사실 이 부분에서는 조금 더 할 말이 있는게, 고1때 국제정보올림피아드 교육생을 지원해 합격이 되었다. 그리고 KSASF와 일정이 겹쳐 교육생 일정 중 첫 날에 참석이 힘든 상황이었고 이를 양해해줄 수 없는지 문의를 했으나 정보과학회 쪽에서는 불가능하다고 했다. 그로 인해 고1때 교육을 듣지 못했고 고2때 다시 지원해 합격했다. 그러나 교육생에 합격한 것과 별개로 나의 알고리즘/자료구조 지식이 그다지 많지 않았기 때문에 안에서는 하위권이었다. 휴대폰을 다 걷어가고 인터넷을 쓸 수 없게끔 하는 것과 같은 제한 사항이 너무 많고, 자세한 에피소드는 적지 않겠지만 무시당한다는 느낌이 들 정도로 통제가 심했다는 것도 교육에 재미를 느끼기보다는 불만만 쌓이는데 한 몫을 했고 더 나아가 아예 PS 분야에 흥미를 잃게끔 만들었다. 고2 여름에는 BOB도 병행했기 때문에 BOB와 더 비교가 되서 그런 것일수도 있긴 하다. 어찌됐든 비용을 전혀 들이지 않은채 공짜로 교육을 시켜준 것이고, 또 조교님들도 다 훌륭하시고 같이 초급반에 속해있던 사람들에서도 뛰어난 학생들이 여럿 있었기 때문에 돌이켜 생각했을 때 내 실력이 갖춰진 상태에서 교육생 캠프에 참여했다면 많은 것을 얻을 수 있었겠지만 당시의 나는 아직 준비가 되지 않았던 것 같다. 그리고 이제는 어차피 내가 상관할 바는 아니지만 정보과학회도 너무 캠프 내에서 학생들을 통제하려고만 하지 않으면 좋겠다. 나와 같이 캠프로 인해 도리어 PS에 흥미를 잃어버리는 경우가 또 생긴다고 하면 조금 슬플 것 같다.


그래도 그냥저냥 배운게 있으니 고2/고3때 전국 은상을 받았다. 그리고 국가암호공모전도 개인적으로 공부해 고2/고3때 장려상을 따고 또 국제정보보호올림피아드라는 마이너한 대회에서도 마찬가지로 고2/고3때 둘 다 은상을 땄다.


한과영에서 학점은 딱 중간정도였는데 이래저래 실적이 많아서 대학 입시는 크게 걱정하지 않았다. 다만 설컴은 학점이 썩 좋지 않아 그런지 1차에서 바로 광탈했다.


대학에 와서 원래는 PS를 다시 할 생각이 없었다. 그래서 교내 알고리즘 동아리에는 아예 가입을 하지 않고 해킹 동아리에 들어갔다. 그렇다고 해서 엄청 열심히 한건 아니었다. 1학기는 그렇게 그냥저냥 흘러가고 2학기때는 노느니 알고리즘이나 적당히 할까 싶어서 알고리즘 동아리를 가입했다. 그리고 해킹 동아리에서 ROP라는 개념을 다뤘는데 ㄹㅇ 너무 어려웠다. 당시 동아리에서는 과제를 몇 번 이상 안내거나 결석을 몇 번 이상 하면 동아리에서 쫓겨나는 제도가 있었고 중반쯤부터 도저히 따라갈 엄두가 나지 않아 자연스럽게 쫓겨나게 되었다ㅠㅠ(쫓겨나긴 했지만 Cykor나 Rokyc 이름으로 대회 나갈 때 나도 껴서 암호학/코딩 문제를 푸는 일이 종종 있기 때문에 뭔가 내 위치가 애매하지만 그냥 Cykor 소속 쩌리 멤버라고 말해도 될 것 같긴 하다.) 그에 비해 알고리즘은 기본 베이스가 있으니 할만해서 백준을 주구장창 풀었다.


2학년이 되어서부터는 계속 PS에 매진했다. 그 덕에 SCPC도 상을 타고 삼성소프트웨어멤버십에 들어가게 되고 이래저래 좋은 일이 많았다. 고등학교때와는 반대로 해킹을 안하고 PS를 다시 하게 되었다. 그러다가 ICPC 월파가 생각보다 할만하다는걸 깨닫고 3학년때는 ICPC 월파를 노리고 정말 열심히 했다. 나 포함 동기 6명이 정말 열심히 했다. 같이 긍정적인 의미의 경쟁도 하고 동기부여도 되고 참 좋았다. 비록 월파 진출에는 실패했지만 실력은 정말 많이 늘었다.


ICPC가 끝나면 딱 깔끔하게 PS에서 손을 뗄 수 있을줄 알았는데 그게 잘 안됐다. 뭔가 아깝게 떨어진 것 같고 1년 더 하면 월파를 비벼볼만 할 것 같고.. 그래서 앞으로 대학원은 막연하지만 암호학쪽을 생각하고 있지만 일단 요새는 포너블, 암호학, PS 셋 다 붙잡고 있다. 셋 다 잘하고 싶다!!


나의 CS 스토리 끝ㅎㅅㅎ

'일상 > 의식의 흐름' 카테고리의 다른 글

데프콘ㅎㅅㅎ  (0) 2019.05.13
.  (0) 2019.05.10
.  (0) 2019.04.02
알고리즘잡스에 대한 개인적인 생각  (44) 2018.12.06
.  (7) 2018.11.27
내일 ICPC  (3) 2018.11.02
  Comments