[c++]stl이 좁은 이유
카테고리: Cpp
DFS BFS
그래프 알고리즘
코딩테스트를 여러번 풀면서 느끼는건, 항상 그래프 문제가 나오게 되면
DFS와 BFS를 사용하여 인접행렬, 인접 리스트 등을 구현해서 문제를 해결하게 된다.
여느 코딩테스트 시험을 준비하는 웹사이트들을 본다고 하더라도
이러한 문제는 정말 많이 볼 수 있다. 이제는 문제 유형만 대충 보더라도 어떠한
알고리즘을 써야 할지 감이 잡힌다. 하지만 여기서 드는 의문점이 있다.
왜 STL은 그래프 관련 알고리즘을 지원하지 않는가
C++ 에서의 STL은 말그대로 “표준” 이다.
이 말의 뜻이 굉장히 중요한데, 현직 개발자에게 이런 이야기를 들은적이 있다.
자료의 컨테이너 같은 경우에 소위 말하는 “C++ 장인들” 이 커스텀 하여 사용하는 경우가 있는데,
이러한 경우에 유지보수가 매우 어렵고, 별거 아닌 것에 시간을 낭비하게 되는 경우가 있다고 한다.
회사는 10명에서 시작해서 5명이 될 수도 있고, 15명이 될 수도 있는거다.
이 15명이 원래 있던 10명에서 5명이 추가될 수도 있고, 1명만 남고 새로운 14명이 들어올 수도 있는거다.
그런데 만약 회사에서 짜놓은 자료구조를 들여다 보고 있는다면 당연히 생산성도 유지력도 떨어진다.
STL이 강력한 이유는, C++ 개발자의 모두가(현직자라면) 이해하고 있다는 점에서 인 것 같다.
굉장이 “일반적” 이고 “유용한(자주 쓰이는)” 기능인 경우에 STL에 포함된다.
하지만 그래프의 경우에도 앞서 말했듯이 여러가지로 나뉜다.
심지어 알고리즘의 경우에도 여러가지의 기준점을 잡고 수행하게 된다. (이 부분은 직접 문제를 풀어보면 알 수 있다.)
백준 알고리즘을 풀다보면 cout을 사용하는지, printf 를 사용하는지에 따라서도 정답과 오답이 갈릴 때가 있다.
그래서 아래와 같은 코드들을 추가하곤 한다. 버퍼와 관련된 함수인데, 여기서는 다루지 않겠다.
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
이 사실을 놓고 보면, 아무리 오버로딩 등을 통해 함수를 구현한다고 해도, 차이가 있을 수 밖에 없고,
또한 그렇게 한다면 이것은 더이상 STL이 아닌 “특수한” 라이브러리가 되어버리기 때문이다.
마치며
자료구조, 알고리즘은 매우 많은 사람들이 강조하는 부분이다. 개발자의 기초라고 할 수 있다.
내 주변 지인 중에 컴퓨터 공학과를 나오고도 코딩 테스트 문제를 제대로 풀지도 못하는 경우도 있었다.
하루에 문제 하나만 제대로 파악하고 공부해도 몇달이면 어렵지 않게 합격하는 후기들을 많이 본다.
나도 꾸준히 하다가 포트폴리오 작업을 하면서 가끔 빼먹을 때도 있지만, 말그대로 기초이기 때문에,
당연히 해야하는 것이고, 겁먹을 필요도 없는 것 같다.
댓글 남기기