공부한 책은 윤성우의 열혈 자료구조란 책으로 600페이지 분량임. 책 두께가 꽤 되지만 코드를 꽤 많이 실어서 읽어야할게 생각보다 많진 않음.
하루에 50페이지씩 공부하면 2주안에 끝낼 수 있겠단 기분 좋은 상상을 하며 책을 읽기 시작했지만 실제로는 쉬엄쉬엄 해서 3주 넘게 걸림. ㅠㅠ
책의 내용은 시간복잡도, 리스트, 스택, 큐,..., 그래프(+크루스칼 알고리즘)까지 자료구조를 구현하며 코드를 설명하는 위주로 구성되어 있음. 처음엔 몰랐는데 나중에 갈수록 앞에 부분(리스트,스택, 큐, 힙 등등)을 이용해야 해서 이런 순서로 진행된거 같음.
코드의 흐름? 코드를 이해하는 것은 그다지 어렵지 않았고 만약 어렵더라도 설명을 보면서 이해해나감.
그럼에도 어려운 부분을 꼽자면 퀵정렬, 그리고 포인터 부분이 잘 이해가 안갔음. 예를 들면 왜 이런 부분에선 이중포인터를 쓰고 주소값을 보내는지 등등..
공부하면서 고민됐던건 이 긴 코드를 직접 스스로 구현해나가며 공부해야하나 였음. 그렇게 하면 분명 더 머리에 남을거 같긴 한데 시간이 너무 오래 걸릴거 같더라. 시간이 많지 않다고 생각해서 난 책 빨리 완독하는데 초점을 뒀었거든. 저자도 자료구조를 안보고 구현하기가 상당히 쉽지 않은 일이고 그보다 그것들을 응용하고 다루는 거에 초점 맞추기를 권했고. 그럼에도 조금 후회되는건 ADT만 보고 스스로 구현해보려 한 후에 코드를 봤었더라면 좋았을탠데...라는 생각이 드는거임.
한번 더 책을 넘겨보면서 차근차근히 구현해볼 생각임. 백준이나 programmers.co.kr에 있는 자료구조 문제들도 풀어볼 생각이고.
애초 코딩 시험 시간이 60분인데 그 시간 안에 코딩을 다 할수 있게 문제를 낸다면 어느 부분에서 나올지는 고민해봐야겠다.
숨은음은
거기에 나오는 자료구조들은 대부분 STL 라이브러리에 구현되어 있어서
굳이 구현해야 한다면 최적XX, 최단XX 이런 식으로 조건 붙은걸 공부하면 좋음
(다익스트라, A*, 크루스칼, 그래프, 깊이우선탐색, 너비우선탐색, 레드블랙트리 등)
그리고 실제로 다 구현을 한 번 이상은 해보는게 좋음.
그래야 이걸 어따 써먹을 지 구현하면서 생각하는 것도 있고 다른 알고리즘을 구현할 때에도 분명 도움이 되거든.
대부분의 코딩테스트는 복합적인데다, 정답이 딱 정해져있는 건 아니라서
이게 어디서 나올까 고민하기 보다는 네가 지식 풀로 쌓아두고
알고리즘이나 문제를 풀면서 몸으로 아 여기엔 이게 좀 더 맞을 거 같은데.. 식으로 생각하면서 풀면 가장 좋아.
중간에 포인터 부분이라던가 그런건 네가 아직 C++의 개념과 기본적인 부분을 정확히 이해하고 있지 못하다는 뜻도 되니까
겸사겸사 그런 것들까지 공부하면 좋을 듯
찰나생멸
좋은 정보 고마워!
숨은음은