카이스트 정글에 입소한 지 어느덧 한 달이라는 시간이 흘렀다.
3주간의 "컴퓨팅 사고로의 전환" 과정이 이제 막 끝이 났다.
후기를 짧게 요약하자면, "컴퓨팅 사고로의 전환? 뭐 당연히.... 응?"
아무리 짧은 정글 5개월 커리큘럼이라지만.. 역시 카이스트는 카이스트구나.
나의 선택은 옳았다. 들어오길 정말 잘했다고 생각한다.
나는 평소, 나 스스로의 사고방식에 대한 확신이 없었다.
항상 직감적으로 판단했던 것들.. 그런 것 같아 보이지만 명쾌하게 그것을 증명할 수 없었던, 어딘가 2% 부족한, 회색지대에 남아있던 것들이 이곳 정글에서 뭔가 점점 선명해지고 있는 것 같다. 나 스스로 확신을 내릴 수 있게 된 것이다! 물론 아직 멀었다. 이제 고작 4주차다.
새삼 정글의 커리큘럼이 더욱 맘에든다.
나는 이곳. 카이스트 정글에 들어온 이유는 커리큘럼의 영향이 매우 크다.
특히, cs기초지식을 다룬다는 점이 그렇다.
한국의 그 어떤 코딩교육, 부트캠프를 찾아보아도 cs기초지식을 다루는 곳은 찾지 못했다. 에꼴42 정도를 제외하면 말이다. 사실 정글은 에꼴42가 모티브이다.
정글과 에꼴42의 공통점이 있다. 취업 목적이 아니라는 것이다.
즉, 현업에서 사용하는 프레임워크 같은 것을 단기간에 배우는 곳이 아니라는 뜻이다.
나는 이러한 점이 내가 원하는 것을 이루기 위한 최적의 환경이라고 생각했다.
다시 본 얘기로 돌아가서,
정글의 "컴퓨팅 사고로의 전환" 과정은 자료구조, 알고리즘을 배우는 과정이다. 학습 방법은 자그마치 백준 문제를 푸는 것이다! 첫 주차 발제가 끝난 직후 괴제로 약 50개의 백준 문제가 주어진다. 그것을 3명 1팀으로 수행해야 하며, 3명 모두 한 문제도 빠짐없이 풀어야 한다 완수된다. 팀원의 도움을 받아서라도 어떻게든.
여기까지는 큰 생각이 들지 않았다. 아 알고리즘 문제 풀기 연습인가? 오히려 익숙함이 느껴졌다. 3주차 이전까지는.
그러나 문제의 난이도를 보고 꽤 당황하긴 했다. 플래티넘2 난이도가 끼여있는 것을 봤기 때문이다. 심지어 첫 주부터. 나는 여기서 만만치 않을 것이라는 직감이 들었다. 결과적으로, 내 직감은 틀리지 않았다. 마지막 주에는 suffix array, lcp를 다루는 문제가 나왔다. 나와 같은 전공자는 어떻게든 해볼만 하겠지만, 이곳 정글은 비전공자가 대다수인 것을 잊지 말자. 비전공자의 입장에서 이것을 푼다는 것은 나로서는 상상이 되지 않았다.
하지만 그럼에도 불구하고 첫 주차라 그런지 쉬운 문제들이 대다수였다. 어느정도 여유가 있었기 때문에 팀원들에게 좀 더 시간을 쓸 수 있었다. 이때 푼 문제들의 종류는 소수, 브루트 포스, 정렬, 재귀, 이분탐색 이었다.
두 번째 주차 부터는 스택, 큐, 힙, 그래프, dfs, bfs, 위상정렬 등을 풀었다. 이때부터 난이도가 급격히 올라가 점점 여유를 부릴 수 없게 되었지만, 그래도 여차저차 어떻게든 해결할 수 있었다.
그리고 세 번째 주차. 나는 여기서 무너졌다.
나는 스스로 직감이 꽤 좋다고 생각한다. 항상 문제를 읽어 보면 시간복잡도 계산 및 대략 어떤 알고리즘을 사용하면 될지 느껴지는 경우가 많다. 물론 알고리즘은 떠올렸지만 훈련이 되어 있지 않아 그 알고리즘의 베이스 코드를 작성하지 못하는 경우도 많지만, 거의 대부분의 문제들, 예를 들어, 그래프 탐색, 브루트 포스, 재귀, 자료구조 활용 같은 것들은 꽤 잘 푸는 편이라고 자신한다.
그 세 번째 주차는 dp, 그리디 문제였다.
부끄러운 얘기지만, 이 유형이 문제에서는 내가 기존에 갖고있던 그 어떠한 경험도 통하지 않았다. 심지어 나의 백준 티어에 비해 낮은 난이도인 골드2~3 임에도 불구하고.
사실 나는 스스로 이미 알고 있었을지도 모른다. 그 동안 외면해왔던 그 사실이 이곳 정글에서 새삼 적나라하게 떠올려졌다. 예전부터 난 유독 dp와 그리디에 약했다. 문제에 대한 엄밀한 정의와 증명 없이 어떠한 경험적 패턴으로만 접근했던 것이다. 그래서 경험하지 못한 유형의 dp와 그리디 문제에 대해서는 타율이 굉장히 낮았다.
예를들면, 이런 식이다.
"이 문제는 dp같은데? dp면 점화식이지. dp테이블을 그려서 패턴을 찾아보자."
문제를 스스로 패턴찾기로 바꿔버리는 것이다. 이것은 사실상 멘사 퀴즈나 다름없다.
또는,
"이 문제는 그리디같은데? 그리디면 일단 정렬이지. 최소? 최대? 힙을 써야하나? 무조건 ~하는 접근을 해보자."
그러고는, 예시 엄밀한 증명없이 몇 가지의 케이스만 가지고 억지로 끼워맞춰서 운좋으면 맞고 아니면 틀리는 식이다.
그래서 결과적으로 dp나 그리디는 문제 제출 횟수도 많고, 정답률도 상대적으로 낮은 편이었다.
아래는 항상 코치님이 말씀하는 것이다.
"문제에는 여러가지 풀이법이 있습니다. 유형에 집착하지 마세요. 어쨌든 문제는 풀면 됩니다."
정말 지당한 말씀이시다. 특정 방법으로만 푸려는 사고방식은 굉장히 위험하다. 고정관념은 현실세계의 문제 해결에도 도움이 되지 않는다. 항상 시야를 넓게 보아야 한다.
dp와 그리디 유형이 마지막 주차에 나온 이유가 있다고 생각한다.
그것은 바로 문제에 대한 접근 방법의 순서이다.
문제를 패턴으로만 풀려고 한다면 결국 dp와 그리디에서 한계를 느낄 것이다.
문제에 대한 원론적인 접근과 증명, 그리고 최적화를 이끌어 내는 과정이 선행될때 비로소 나 자신에 대한 한계를 돌파할 수 있을 것이다.
이것을 깨닫는 것이 바로 "컴퓨팅 사고로의 전환" 이 아닐까 생각한다.
초심으로 돌아가자.
'카이스트 정글' 카테고리의 다른 글
레드-블랙 트리 그리고 C언어 (0) | 2024.09.12 |
---|---|
정글 나인 헬퍼 제작 후기 (0) | 2024.09.06 |
리눅스 왜 써요? (0) | 2024.08.27 |
지식을 소화한다는 것 (0) | 2024.08.23 |
[BOJ 2261] 가장 가까운 두 점 (0) | 2024.08.17 |