초등교과에 코딩교과가 들어가면서, 스크래치나 엔트리로 흥미를 유발하는 그야말로 흥미위주의 코딩 수업이 주를 이루고 있습니다. 그래서인지 초중등 학생들 중에서도 로봇과 연계된 코딩만을 코딩수업이라 생각해서 곤란한 경우가 많습니다. 물론 흥미를 유발하는 교육이 나쁘지는 않습니다. 오히려 어릴 때는 그런 교육이 미래의 훌륭한 IT인재를 길러내는 시발점이 될 것이라고 생각하는 1인입니다.
하지만 올림피아드 생각하시는 분들, 특목고 생각하시는 분들은 거기에 머물러 있으면 안될 것 같습니다. 게다가 코딩 공부하려는 대학생이상의 분들은 C언어, 파이썬, 자바 등의 프로그래밍 언어 책과 알고리즘 책을 봐야되지요.^^
그 중 요즘 인문계열 대학과정에도 들어갈 정도로 파이썬이 핫한지 꽤 되었는데요. 덕분에 이번에 영진닷컴에서 파이썬으로 공부하는 알고리즘 책이 나와서 살펴보았습니다.
이 책은 크게 핵심개념과 실전문제로 나뉘어져 있고, 페이지도 거의 반반 배정되어 있습니다. 알고리즘을 공부할 때 필요한 기본 개념들이 꽉 차있는 것을 보실 수 있는데요.
처음에는 목차만 보고 난이도를 초급에서 중급정도로 생각했습니다만, 오해더군요. 책의 내용을 자세히 공부해 보시면, 동적알고리즘까지 등장해서 고급까지 생각해야 할 것 같습니다.
핵심개념
제일 먼저 파이썬 개발 환경을 만들어야겠지요. 파이썬은 인터넷에서 무료로 다운로드 받아서 활용하실 수 있습니다. 그리고 알고리즘 책답게 알고리즘에 대해 정의하고 있고, 그 분석방법을 소개하고 있습니다. 예까지 들어서 설명을 하고 있는데 O표기법까지 설명이 군더더기없이 깔끔한 편입니다.
다른 책들이 알고리즘과 O표기법의 정의에 대해서만 간단하게 말하고 넘어간다면, 이 책은 특정 알고리즘을 무조건적으로 추종하는 것이 아니라, 기본 개념을 이해하고 성능 평가를 할 수 있게끔 최적화에 대해 설명하고 있습니다.
그리고 바로 연결리스트에 대한 설명이 나오는데요.
C언어의 포인트 개념이 파이썬에는 없는데다 연결리스트가 배열의 단점을 극복할 수 있는 자료구조이다 보니 파이썬에서 자주 사용되는 중요한 연결리스트를 먼저 소개하고 있습니다. 연결리스트의 기본 개념인 노드와 링크를 설명하고, 리스트 초기화, 삽입 알고리즘(데이터 추가), 삭제 알고리즘(데이터 삭제)을 소개하며 그 효율성까지 확인하고 있습니다.
설명은 사진과 그림, 코드를 모두 동원하여 이해하기 쉽게 하고 있습니다. 다음으로는 이중연결리스트에 대해서 같은 방식으로 설명이 이어집니다.
이렇게 파이썬에서 많이 사용되고 중요한 자료구조를 먼저 소개하고 그에 맞는 알고리즘들을 예를 들며, 효율성까지 확인하고 있는데요.
다른 책들이 단순히 특정 문제를 해결하기 위해서는 '이 알고리즘을 사용하면 됩니다'라고 소개하는 것과는 다른 설명방식입니다. 그야말로 알고리즘에 대해 이해하고, 효율성 측면에서 좋은 코딩을 할 수 있도록 개념을 확실히 잡아주는 책입니다.
핵심개념에는 연결리스트 외에도 스택, 큐, 트리 등 기본 자료구조에 대한 설명도 수록되어 있습니다. 그리고 나면 이제 가장 기본적인 알고리즘들을 소개하는데요. 트리순회 3가지, 정렬 알고리즘(선택, 삽입, 버블, 셸, 퀵, 기수, 병합, 힙), 검색 알고리즘(이전검색, 재귀호출을 이용한 이진검색) 등 기본적으로 반드시 알고 있어야 하는 기초 알고리즘은 개념편에서 이미 설명이 다 끝나버립니다.
실전문제
기본 개념에 이어 실전문제에서는 한 문제에 대해 다양한 알고리즘으로 문제에 접근하고 있습니다. 한 문제에 한 가지 알고리즘을 알려주는 것이 아니라 가능한 알고리즘을 몇 가지 적용하며 가장 효율적인 것이 무엇인지 생각해 볼 수 있도록 설명하고 있지요.
단순히 소수를 구하는 방법을 한 두가지 소개하는 것은 기존에 책이 많습니다. 그런데 이 책은 소수를 구하는 문제 하나만 두고도 여러가지 방법을 고려해서 코딩을 시켜보고 있고, 그 효율성을 합리적으로 따져 보고 있습니다.
이런건 선생님이 알고리즘에 대해 잘 알고 있어야 겨우 이루어질 수 있는 교육인데요. 저자의 의도가 많이 보이는 부분입니다. 그냥 특정 문제를 해결할 때 이 알고리즘을 사용해라가 아닌, 앞으로 어떤 미지의 문제를 만날지 모르니 이렇게 여러 알고리즘을 사용해서 각 문제에 효율적인 것을 판단하여 선택해라는 겁니다.
한마디로 수학공부할 때 이 공식쓰면 됩니다가 아니라, 문제를 푸는 다양한 방법을 소개하며 어떤 방법이 가장 좋을지 같이 생각해보자는 거죠. 사실 학생 입장에서는 문제에 대한 답만 알려주는 게 단기적으로 고마울 수 있지만, 그러면 생각하는 힘이 길러지지 않겠지요? ^^
보통의 알고리즘 책들이 동적계획법까지 잘 안나오는데, 이 책은 피보나치 수 구하는 문제에 동적계획법을 적용해보기도 합니다.
어떤가요? 그냥 공식만 알려주며 암기해라가 아닌, 문제에 여러 알고리즘을 적용하여 작성해보고 그 효율성을 몸소 느끼게 하며, 고급 수준의 동적계획법까지 적용하는 방법을 알려주는 '필수 알고리즘 with 파이썬'~!
멋지네요^^
코딩 공부하시는 분들은 코드스타일이 굉장히 궁금하기 마련이라 위 사진 확인해보세요. 재귀호출을 이용한 원반 옮기기 코드인데, 상당히 깔끔합니다. 이런 코드가 알고리즘을 이해할 때 도움이 많이 되지요.
중고등 학생들뿐만 아니라 취업을 위해 코딩을 공부하고 있는 대학생, 강좌를 하고 있는 선생님들까지 두루 알고리즘에 대해 정확히 알 수 있도록 하고 있는 진짜 알고리즘책~!
필수 알고리즘 with 파이썬
알고리즘에 대해 정확히 알고 싶다면, 파이썬으로 공부하고 있다면, 알고리즘 중급 수준을 넘어서고 싶다면 권해주고 싶은 책입니다.