자료구조와 알고리즘 중요성

­김성우·2022년 7월 4일

자료구조 역시 코딩 (머신러닝도 아니고 딥러닝도 이 둘을 포함하는 훨씬 광활한 영역의 '코딩') 의 기본이 되는 부분이라고 생각한다.

사실 인공지능과 딥러닝을 공부하는데 자료구조가 직접적으로 나타나거나 그러지는 않는다. 모델을 직접 손 본다고 해도 loss function 이나 구조, 설계 이런것들을 손 보지 의사결정나무나 뉴럴네트워크 자체를 손 보고 크게 바꾸는 일은 없을거다. 그러면 왜 자료구조를 알아야하나?

자료구조를 모르고 AI 코딩을 한다는 것은 기타 코드(code 말고 chord) 도 모른는데 곡을 치겠다는 것과 유사하다(사실 내가 이전에 그랬다 ㅎ). 영상을 무작정 따라하며 연습을 무진장 많이 하면 따라칠 수 있겠지. 계속 코드는 보이지만 신경 안 쓰고 손가락만 따라하면 음을 낼 수는 있겠지. 그치만 A 가 A#이 되는 것처럼 조금이라도 바뀌거나 무대에서 즉흥적인 요구를 받는다면 진짜 실력이 다 드러난다. 제대로 chord 들 부터 배우고, 기타의 구조와 소리 내는 방식 등을 알아야 기타를 친다 고 말할 수 있다. 이러한 사람들이 오래오래 기타를 치고 잘한다고 인정 받는다.

코딩도 똑같다. 자료구조와 알고리즘, 시간복잡도와 연산량 등을 제대로 이해하지 않고 Random Forest, Neural Network, GAN 등을 쓰고 실행할 수는 있다. 영상이나 블로그의 코드를 따라쓰고(복붙하거나...) 실행하면 결과는 잘 나온다. 하지만 이것은 정말 자기가 배운 것이 아니며, 나중에 필요할때 써먹을 수도 없을 것이다. 모델을 공부해서 아는 것 처럼 느껴져도 조금이라도 변형을 가하면 예측조차 할 수 없게 된다. 또학 대학원 면접(이 블로그 만든 이유...)이나 동아리 면접 등에서 위의 모델들에 대한 질문은 외운대로 말할 수 있어도 '그러면 큐는 뭐고 어디에 쓰이나요?' 라는 질문 하나 받고 그것을 제대로 답변 못하면 끝장이다. 사실 통계지식들도 그렇다...

반면에 기초적인 지식들을 알고 코딩을 해보고, 직접 고민하고 생각하고 만들어보는 과정을 겪은 사람은 다르다. 남의 코드를 보는데 '이게 맞는걸까?', '더 빠르게 할 수는 없을까?', '여기서 리스트 쓰는 것은 좀 비효율적인 것 같은데 큐를 써보자' 와 같은 고민을 하고 접목을 시킬 수 있다. 이러한 차이가 겉보기에는 별거 아닌 것 같아도 직접 대화를 해보면 바로 알 수 있다.

< 코딩 공부 사이트 >
https://www.acmicpc.net/

그래서 항상 남들이 나보고 코딩 어떻게 했냐고 물으면 백준을 풀라고 강력추천한다. 백준에 일년반 정도 쓰니까 어떤 코드를 봐도 이해가 금방 되고 더 좋게 만들고 내가 필요한대로 가져다 쓸 수 있게 된다. 그리고 남의 코드 봐주는 것도 매우 쉬워진다.

항상 나는 코드를 시작하는 사람에게는 백준을 강력추천한다. 백준을 직접 풀고, 고민하며 실력을 쌓는다. '진짜' 실력이. 한 1년에 걸쳐 단계별로 풀기에서 BFS DFS 까지 밀고 레벨 골드1 정도만 올려놔도 기본 실력을 갖췄다고 얘기할 수 있다. 실제로 일년정도 제대로 공부하고 무작정 네이버 코딩테스트도 봤는데 쉽게 붙었다. 따로 준비하지도 않았다. 이정도만 되도 코드에 대한 차원이 다른 자신감을 가지게 된다.

하여튼 자료구조와 알고리즘을 이 시리즈에 정리를 하면서 나도 요즘 잊었던 기초를 다시 쌓아보고자 한다. 면접 때 물어도 쉽게 대답할 수 있도록 잘 정리하고 외우자. 최근 대학원과 관련된 급한 불들은 다 껐으니 이제 다시 천천히 글을 쓰도록 하자. 다시 천천히 내 공부를 하자.

profile
Dreaming of Algorithm & AI Expert...

0개의 댓글