반응형
이 책은 심화학습용 문제지이지 초보들이 무턱대고 풀 수 있는 문제지가 아니라는 것을 알아야 합니다. 우선 자료구조와 알고리즘 기본 정도는 알고 있어야 합니다.
자료구조 학습에 관하여...
이 책에 들어가기 전에 자료구조를 탄탄히 해두는 것이 중요합니다. 자료구조는 많이 알면 알수록 프로그래밍에 도움이 많이되는 관
자료구조 그 후...
분명히 STL 이전에는 자료구조를 직접 구현할 수 있는가가 중요 하였습니다. C/C++언어에서 표준화된 자료구조를 지원하지 않았기 때문입니다. 하지만 C 프로그래머가 아닌 이상 STL을 사용하게 되면 자료구조의 구현보다는 현재 상황에서 어떤 자료구조를 사용해야 하는가가 중요합니다. 또 어떻게 응용해야 하는가가 더욱 중요하게 됩니다. 그것이 결국 프로그램의 성능에 영향을 끼치기 때문입니다. 물론, 대량의 데이터를 빠른 시간에 처리할 필요없는 클라이언트 프로그래밍 같은 경우에는 생산성 높고 버그 없는 구조체 쓰는 것이 더욱 좋습니다.
알고리즘
저 대학시절에는 자료구조 만이 중시되었던거 같은데 근래에는 알고리즘 강좌가 더욱 유명해지는 듯 합니다. 기본적인 것은 한국정보올림피아드 사이트의 고급알고리즘강좌를 보시면 됩니다. 뭐, 기본적인 것만 설명하고 있습니다. 알고리즘은 공부 분량 자체는 자료구조보다 적습니다. 자료구조가 메모리의 구조를 어떻게 효율적으로 가져가는 가에 중점을 두고 있다면 알고리즘은 문제를 전산학적으로 어떻게 효율적으로 풀어나갈 것인가에 중점을 두고 있습니다. BITComputer와 방통대 동영상 강의를 들으면서 기초를 잡고 문제를 풀면서 알아 나간거 같은데 기억이 대략 가물가물 합니다. 그래프 이론의 DFS, BFS, Merge Sort등 알고리즘의 기본은 자료구조에서도 배우는 것들이라 그리 크게 시간이 걸리지는 않았던거 같습니다. 알고리즘의 기본적인 것은 분할정복법, 탐욕알고리즘, 동적계획법, 퇴각검색법(Back Tracking), 분기한정법 등이 있으며 자료구조는 적당한 수준 정도만 알면 됩니다. 참고로 자료구조의 이해없이 알고리즘은 시작할 수 없습니다. 그 외에 추가적인 상황에 따른 다양한 알고리즘이란 것들이 있는데 Programming Challenges를 보면서 필요한 것들만 찾아서 공부하여도 될 듯 합니다. 이런 추가적인 알고리즘은 상황에 따라 쓰면 문제를 빠르고 효율적으로 풀 수 있는 장점이 있습니다. 물론, 현업에서는 문제만 풀면 되기 때문에 몰라도 큰 문제가 되지는 않습니다. 하지만 구글같이 처리 속도가 중요한 SW를 개발하는 회사에서는 굉장히 중요하게 생각합니다. 그것은 알고리즘이라는 것 자체가 해당 문제를 가장 빠르고 효율적으로 처리하는 증명된 방법이기 때문입니다.
Programming Challenges 알고리즘 트레이닝 북
이렇게 지루할 정도로 자료구조와 알고리즘를 공부하신 후에 이 책을 보시는 것이 좋습니다. 이 책의 번역은 훌륭한 편이나 책의 설명은 번역체+집필양으로 인하여 이해하기 거의 불가능하기 때문입니다. 뭐, 번역체로 어색하게 표현한 자료구조의 요약집 같다고 할 수 있습니다. 더욱이 그림 설명이 너무 적어 자료구조 특성상 개념잡기가 너무 힘듭니다.
문제를 풀기 위하여 필요한 기본적인 것은 자료구조, 알고리즘 그리고 수학입니다. 수학중에서는 그래도 난이도가 낮은 부분을 담고 있지만 쓰지 않던 것을 써야하는 입장에서는 쉽지 않아 보입니다. 14장 중 5장이 수학에 관한 부분입니다. 그 중에 상당수가 프로그래밍 능력보다는 수학 풀이능력을 요구합니다. 프로그래밍은 그냥 해당 풀이를 프로그램화하는 정도인 듯 보입니다.
그 외에는 자료구조와 알고리즘의 내용을 담고 있습니다. 색칠문제와 같은 기본적이지만 본인과 같은 사람에게는 조금은 독특한 알고리즘 문제를 제외한다면 무난히 풀 수 있는 정도 입니다. 솔직히 말하여 이 책 중에 수학과 관련된 부분은 풀지 않아도 해당 분야를 하지 않는다면 대회에 나갈 이유 없는 저와 같은 프로그램머에게는 별 문제 없을 듯 보입니다. 하지만 자료구조와 알고리즘에 관련된 부분은 반드시 봐두어야 한다고 생각합니다.
이 책의 문제는 상당수가 SW의 핵심 알고리즘으로 확장해도 손색없을 만한 내용들을 문제로 담고 있습니다. 개인적으로 이런 문제 1~2시간 만에 푸는 괴물들은 테트리스 정도는 몇 시간 만에 만들 수 있지 않을까 생각합니다. 저는 이 책 보는데 6개월 걸렸습니다. 많은 시간은 수학 공부와 앨고리즘 공부에 할애하였습니다.
본격적으로 이 책에서 문제를 보는 시간을 한 법 계산하여 보겠습니다. 수학과 알고리즘, 자료구조를 아는 상태라고 가정하였을 때 {풀이시간} = 문제 읽기 + 문제 인식 및 정의 + 풀이 아이디어 생각(적용 알고리즘 선택) + {코딩 + 검증(ACM Robot)}으로 나누어 집니다. 흔히들 가장 많은 시간이 필요한 것이 풀이 아이디어 생각일 듯 보이지만 상당 부분의 문제는 문제 인식 및 정의에 대부분의 시간을 소요하는 듯 합니다. 즉, 어떻게 보면 문제를 얼마나 명확히 하는가가 가장 중요한 듯 보입니다. 개인적으로는 코딩 및 검증은 한 1x문제만 한 듯 보입니다. 너무 시간이 걸려서 이기도 하고 코딩 경험이 이미 몇 십만 라인의 코딩을 짜본 본인에게는 크게 득이될게 없다고 생각해서 입니다. 물론 검증도 중요하지만 검증이라는 것 자체가 생각지 못한 케이스를 찾아 버그를 수정하는 것이 주 목적인 관계로 그것도 크게 득이될 게 없다고 생각해서 코딩과 같이 하지 않았습니다.
이 책을 읽어 보시려고 한다면 반드시 자료구조, 앨고리즘을 깊이 한 뒤에 하시기를 바랍니다. 참고로 이 책의 설명으로 공부하실 생각은 하지 않으시는 것이 좋을 듯 합니다. 그리고 자료구조는 균형트리 전까지는 하셔야 합니다.
마지막으로 본인은 이 책을 보면서 하도 하드하게 문제 인식에 노력을 했기 때문에 문제를 보고 정의 하는 능력이 굉장히 좋아진 듯 보입니다. 게임을 할 때 몬스터의 움직임을 보면서 저 움직임이 어떻게 정의되었을 까가 보일 정도로...
반응형
'알고리즘' 카테고리의 다른 글
[서평] 인공지능 투자가 퀀트 (0) | 2023.11.07 |
---|---|
[백준 25308] 방사형 그래프 - 힌트에 맞는 풀이 (0) | 2023.07.17 |
[백준] 알고리즘 수업 - 점근적 표기 1 (0) | 2023.06.11 |
LEX 관련 인터넷 문서 소개 (0) | 2012.06.17 |
Array의 O(1)의 검색시간의 이점을 가지면서 Linked List의 유연성을 가질 수는 없는가? (0) | 2010.04.08 |
네트워크 흐름 문제 (Network Flow Problem) (0) | 2010.04.07 |
정수론 중에서... (1) | 2009.12.31 |
[서평] 프로그래밍 면접 이렇게 준비한다. (0) | 2009.09.01 |