|
입사 후 알고리즘 문제를 안 푼지 어연 백만년... 슬슬 알고리즘 문제 좀 다시 풀어봐야 겠다 하고있었는데, 마침 한빛미디어에 눈에 띄는 책이 있어 읽게 되었다:-)
[책 표지가 개인적으로 굉장히 마음에 든다. 검정+빨강 조합!] 다른 알고리즘 책들과는 달리 이 책은 초심자를 위한 책이다. 대부분의 프로그래밍 입문자들은 '알고리즘'이라고하면 다가가기 힘든 벽을 느끼곤 한다고 한다. 하지만 사실 알고리즘이라는게 프로그래밍 언어에 대한 사용 유무의 차이라기보다는 해결방법을 생각해낼 수 있느냐 없느냐의 차이다 보니 프로그래밍 입문자들도 충분히 알고리즘 문제들을 풀 수 있다. 초심자를 위한 책이라고해서 쉬운 책이라는 말은 아니다. 대상 독자층이 초심자이지만, 책을 보며 점점 실력을 늘려나간다는 목적에 맞춰 책이 진행될 수록 난이도도 함께 점점 올라간다.
[예제코드는 위와 같이 세가지 언어로 제공된다] 초반 부에는 프로그래밍을 아예 처음해보는 사람입장위해 문자열 처리, if문, for문 등의 설명을 해준다. 그만큼 언어를 능숙하게 다루느냐 아니느냐의 차이는 알고리즘 풀이에서 큰 문제가 되지 않는다는 것을 뜻한다(물론 능숙하면 더 좋다). 예시 코드도 3가지 언어(C#, C++, java)를 사용하며 입문자들을 배려하려는 모습이 보인다. 또한, TopCoder문제들 자체가 STL을 허용하기 때문에 이 책에서의 문제풀이에서도 STL을 자주 사용한다. 시간이 난다면, 문제를 풀 때 간단한 자료구조 정도는 직접 코딩하며 푸는 것도 나쁘지 않을 것 같다.
[오른쪽 상단에 난이도가 표시되고, 그 아래에 TopCoder문제에 대한 정보가 나와있다. Arena에 가서 해당 문제번호를 찾아서 보면 된다:-)] 일단 TopCoder문제들이다보니 책에 소개되는 문제들에 대한 질은 확실히 좋다. 각 단원별로 난이도 배분도 잘 되있다. 번역이 잘 된 건지 원래 작가가 잘 쓴 건지, 문장들도 굉장히 쉽게 잘 읽힌다(난이도가 쉽다는게 아님). 가끔 번역서들을 보면 분명히 한글인데도 문장 자체를 이해하기 힘들어, 원서를 펼쳐들게 되는 경우가 많은데 이 책에서는 그런 문제들이 드물었다 * 오타/오역과는 별개의 이야기 - 사소한 오타/오역이 약간 존재한다 ..알고리즘 흐름을 나타낸 그림에서 화살표가 잘못 표시된 경우도 있었다. 오탈자 등록을 해두었으니 다음 개정판에서 바뀌지 않을까?).
위와 같이 그림으로 하나하나 친절하게 설명해주기도 한다. 문제에 대한 풀이부분에서 그림으로 설명하는 건 기본이고, 가끔은 문제자체를 그림으로 표현하여 설명해주기도 한다. 알고리즘이 생각의 흐름이다 보니 확실히 글로만 설명하는 것보다 직관적이고 나중에 비슷한 문제에서 풀이법을 혼자 생각하는데에도 큰 도움이 된다.
무엇보다 마음에 드는 것은 이 책도 점진적 개선 방식으로 진행된다는 것이다. 앞단원에서 학습한 내용들을 점점 발전시키고 개선시켜나가는 방식으로 진행된다. 코딩 기법에 따른 여러가지 해답들과 더불어 알고리즘의 본질이라고 할 수 있는 수학적 해결 방법도 함께 학습할 수 있도록 하기 때문에 확실히 큰 도움이 되는 책이라는 생각이 든다. 초반에는 꽤 쉬운 문제들로 시작하여 후반부로 갈수록 상당히 난이도가 있는 문제들을 제시해준다. 하지만 해설이 매우 좋기 때문에 혼자하는 학습임에도 피드백이 빠르고 좋았다.
[위와 같이 엄청난 길이의 DataSet은.........일일히 치긴 힘들다. - Topcoder Arena에서 복사하자^^] 다만 조금 아쉬웠던 점은, Input Data Set이나 예제코드들을 홈페이지에서 파일로 제공하지 않는 다는 점이다. 알고리즘 문제풀이를 다룬 책에서 Input Data Set을 제공하지 않는다는 것은 Input 입력 시 무한의 노가다를 요구한다는 뜻인데.. 조금 아쉬웠다. txt파일로 제공해주면, linux에서의 경우엔 '>'명령어 하나로 한방에 모든 케이스의 테스트가 가능하여 편리한데 말이다... 제공해주지 않는 것은 아쉽지만 TopCoder Arena에 접속하여 이전 문제들을 찾아보면, Input Data Set을 복사할 수 있으니 그렇게 하면 Input 입력 시 조금 더 편할 것으로 보인다 :-)
또한, 예제코드를 3가지 언어로 표현해주는 것은 양날의 검인 듯 하다. 세 언어의 차이점이 강한 코드일때에는 분명히 큰 장점이 될 수 있지만, 차이가 별로 없는 경우에는 괜히 페이지만 늘어나는 효과가 날 수 있기 때문이다. 알고리즘의 경우에는 사실 언어에 따른 차이가 그렇게 크지 않다는 점에서 조금 아쉬운 점이 아닐 수 없다. 책에서는 수도코드형식으로 보여주고, 홈페이지에서 세가지 언어의 예제코드를 파일로서 제공해줬으면 더 좋지 않았을까 하는 아쉬움이 남는다.
입문자입장에서 최대한 이해하기 쉽게 설명하다보니 전공학과에서 배우는 것과는 달리, 알고리즘에 대한 모든 것을 다루지는 않는다. 하지만 분명히 큰 도움이 되는 책! 임에는 틀림없다:-D!
|
|
요사이 많은 앱, 웹 공모전과 해커톤등이 있지만, 개발자로서 오롯이 개발 능력만으로 승부를 할 수 있는 대회에서 좋은 성적을 거두는 것을 더 큰 영광으로, 성공으로, 더 값진 것으로 생각하는 이들이 있으리라 생각한다. 최소한, 나는 그렇게 생각을 하고 있으니 나와 같은 사람이 있지 않을까? 그런 내게 탑코더는 초능력자들만이 존재한다고 생각하는, 마치 그리스 로마 신화의 최고 12신들이 있는 올림포스 산 정상의 판테온 같은 곳이었다. 차마 참가해볼 생각도 하지 못했던 곳이지만 이 책을 보고 처음 계정을 만들었고, 이제 이 책을 바탕으로 차근차근 연습한 후, 도전을 해야겠다는 마음이 들었다. 이 책의 구성은 탑코더 등록방법과 프로그래밍 기초 내용을 소개한 후, 초급, 중급, 상급의 실제 알고리즘 문제 풀이 과정으로 되어있다. 실제 알고리즘 문제들을 제시하고 그 문제에 대한 해석, 접근방법을 언급한 후 해결 과정과 실제 소스를 C#, Java, C++의 언어로 보여준다. 처음 문제가 너무 낯설어 문제만 봐서는 도통 감을 잡지 못하다가, 입력된 예시와 그의 결과를 보면 바로 감을 잡을 수 있었는데, 초반에는 전체탐색이라고 정의한 전부 for문을 이용해서 loop를 이용하는 방법을 이용하면 수학적 지식 없이도 거의 모든 문제의 해결이 가능했다. 하지만 중급에서 프로그램의 실행 시간과 메모리 사용량이 있는 실제 탑코더의 환경을 언급하고 실행시간과 메모리 사용에 대해서 신경을 쓰게 된다. 이를 위해 '한 번 계산한 것은 두 번 계산하지 않는다.', '하지 않아도 되는 계산은 처음부터 하지 말자.', '탐색 범위를 좁히자'의 3가지 핵심 방법을 제시하고 중요한 내용답게 많은 분량을 할애하여 설명한다. 마지막인 상급이 되면 상당히 어려운 문제가 나오지만 지금까지 배운 알고리즘, 전체 탐색, 처리를 정하고 범위를 한정하는 것 등을 조합하면 반드시 풀 수 있기에 바로 답을 보고 싶은 마음을 참으며 여러 가지 방법을 깊게 생각하고 시도해 보는 것이 좋은 학습이 될 것이다. 이 책에서 초반에 가장 강조하는 것은 프로그래밍과 관련된 기초 지식이 아니라 오히려 자신감, 도전정신을 갖는 것이다. 그러다 보니 자기계발서에서 볼 수 있는 듯한 구절들도 많이 보이지만, 어는 곳에서나 통용될 만한 진리임에는 틀림없는 것 같다. 수학적 지식과 어려운 알고리즘을 알아야 풀 수 있다는 생각은 이제 버려주세요. Division 1 에서 높은 수준의 문제가 아니라면 특별한 지식이 없어도 풀 수 있습니다. "어떻게든 당연히 풀 수 있어!"라고 생각하는 것이 프로그래밍 대회 공략의 첫걸음입니다. - p78 그리고 그 다음에 필요한 것은 많은 문제에 도전하고, 풀어보는 노력으로 보인다. 아래와 같이 책에서 언급했다 싶이 한 번에 문제를 풀 수는 없을 것이다. 당연히 많은 실패를 겪게 되니 좌절하지 말고, 조금 더 생각하고, 도전해봐야 할 것이다. 만약 실수했어도 실망하지 말고 실수의 원인을 분석해보세요. 실수를 반복하지 않도록 연습하면 이러한 수준의 문제는 쉽게 풀 수 있을 것입니다. - p78 실패를 겪다 보면 금세 계산량의 개념이 익혀질 것입니다. - p201 분명히 말하지만 법칙을 발견하는 정석 같은 방법은 없습니다. 가능한 많은 문제를 풀어보는 방법밖에 없습니다. - p333
책의 내용은 대체로 만족스러웠지만 초반의 프로그래밍 기초는 실제 어느 정도 지식을 갖춘 사람에게는 의미가 없고, 전혀 모르는 초심자에게는 그리 쉬운 설명은 아니기에 큰 도움이 되지 않을 것 같다는 생각이 들었다. 마지막 장에서 소수, 최대공약수 최소공배수의 간단한 수학적 지식을 언급하고 있는데 이 부분이 프로그래밍 기초에 이어나오는 것이 좀 더 어울리지 않을까 하는 생각이 들었다. 또한, 이 책에는 C#, Java, C++ 의 언어들이 언급되기에, 이 점이 장점이자 한 언어만 사용하는 대부분의 개발자에게는 책을 보는 흐름을 해치는데 한 언어에만 집중에서 여러 언어 버전으로 나와도 괜찮을 것이라는 생각이 들었다. 하지만 위와 같은 의견은 개인적인 의견이기에, 전체적으로 보기 좋은 책이라는 생각이다. |
|
As you know, understanding of Algorithm and data structure is number one weapon to software engineer. So all programmer want to write code more efficiently. Nowdays. there are a lot of good framework that offer everything of design and good template. but that can't provide good code to solve the problem. To solve some kind of problem, you need to study this kind of books. This is second book and funny book to study algorithm. your first algorithm book may be thick algorithm textbook like "introduce to algorithms" you know that kinda book is so boring. you need this book. This book is very comfortable to read. All answer is next to Question. you don't need to go around to find a answer at end of book. and this book provide 2 kind of language C++ / C#. Last , this book consist of 3 level challenge. 1 level may pretty useful to you. and don't make you give-up so early. p.s my computer's language system is out of order. so i cannot help writting this article in english. sorry :-< |
|
요즘 알고리즘 공부 중이라 여러 책들을 비교해가면서 공부하고 있는데, 아래는 내가 보고 있는 책 목록이다.
1) 알고리즘 트레이닝 북 - 한빛미디어 2) 알고리즘 문제 해결 전략 - 인사이트
각각 장단점이 있지만 이 책은 기본 개념 잡기에 충실한 책인 것 같은데 설명이 쉽고 술술 읽히는 것이 장점이다.
특히 점화식을 세울 수 없으면 손댈 수 없을 것 같던 동적 프로그래밍 쪽이 쉽고 자세히 설명이 되어 있고 관련 예제들로 개념 잡기와 성취감을 동시에 느낄 수 있어 강추할 만한 책이다.
최근 카탈랑 수에 대해서 찾아볼 일이 있었는데,, 인터넷 블로그들에는 너무 수학적으로 설명이 되어 있어 이해하길 포기했었는데 이 책의 설명을 보고 감이 잡히는 듯하다. :D |
|
읽기 편한 구성으로 되어있으며 "알고리즘 문제해결 전략" 과 비교하자면 조금 편하게 읽을 수 있습니다.
한권으로 되어있는데도 꽤많은 내용을 담고 있어서 편하게 읽을 수 있습니다.
코드를 JAVA, C#, C++ 로 설명해주고 있기 때문에 C를 하는 사람이나 JAVA 를 하는 사람 어렵지 않게 읽을 수 있으며 수도 코드로 되어있는 경우 언어의 특성에 맞게 자신이 작성해야되는 부분이 있는데 언어의 특성에 맞게 작성되어 있어 조금 더 맞춤형으로 읽을 수 있습니다.
알고리즘 문제해결 전략이 고급과정이라고 한다면 탑코더는 중급 또는 중상급 과정으로 공부하기에 알맞은 책이라고 생각합니다 |
|
"TOPCODER 알고리즘 트레이닝" 저자 : 타카하시 나오히로 지음 | 옮긴이 : 윤인성 출판사 : 한빛미디어 알고리즘은 컴퓨터/전산 관련 업무를 하는 사람 또는 공부하는 학생들에게 절대 빠질 수 없는 학문입니다. 복잡한 문제를 단순화하여 그 해답을 찾는 과정은 굉장히 짜릿하고 멋진 일입니다. 요즘 추세가 소프트웨어 학문을 점차 정규교육으로 하자는 말이 나올만큼 그 중요성과 발전 가능성이 큰 분야인데요, 저 또한 관련 전공자로써 꼭 한번 보고 싶었던 책입니다. TOPCODER는 여러 관련 알고리즘 대회 중 하나 입니다. www.topcoder.com에 접속하시면 관련 정보 많으니 한번 관심있으신 분들은 찾아보세요. 상시적으로 여러 대회들이 온라인에서 개최 된답니다. 이제 'TOPCODER 알고리즘 트레이닝' 의 책의 리뷰를 한번 적어볼까 합니다. 먼저 목차는 아래의 목차보기를 눌러보시면 보실 수 있습니다. 목차보기 목차를 보시면 TOPCODER에 대한 설명부터 마지막 수학관련 문제까지 가득 차있습니다. 이 책은 목차를 보시면 아시겠지만, 일반적인 알고리즘 책과는 조금 성격이 다릅니다. 문제 해결방법과 알고리즘 TOPCODER 대회에 초점이 좀 더 맞춰져 있으며, 이론적인 설명은 안다는 가정하에 문제 풀이로써 다양한 문제에 대한 해결능력과 숙달 위주의 책입니다. 먼저 책의 구성을 알아봅시다. 위 사진과 같이 기존의 문제와 그 문제의 해석이 처음 나옵니다. 한글 해석을 읽어보시고, 이해가 안된다면 영어 원본을 읽어보시길 추천드립니다. 한글 해석 중의 잘못된 해석이 좀 있습니다 ^^. 그래서 너무 이해가 안되는 경우에는 자신이 이해를 하지 못하는 것이 아니라 해석이 잘못된 것 일 수도 있으니 확인 꼭 해보세요. 위와 같이 문제는 굉장히 다양하게 제공되어 집니다. 한 책에 너무 다양하게 할려다 보니, 넓게는 볼 수 있으나, 깊게는 공부하기 조금 힘들다는게 단점이라면 단점일 수도 있겠습니다. 하지만 단점이 있다면 장점도 분명 존재하겠죠, 아래 사진을 보시는 것과 같이 그 문제에 대해서는 정확한 이해를 시켜주기 위한 그림과 다양한 설명 예시들이 있습니다. 하지만 이것만 가지고 문제를 풀 순 없답니다! 그래서 이렇게 문제의 해설 코드를 제공하는데요!! 여기서 중요한 것!! 총 3가지 언어로 코드를 지원합니다. C++, Java, C# 이렇게 말입니다. 다양한 코드들이 있지만, main 함수는 지원하지 않기에 자신이 직접 코드를 짜보면서 연습을 하셔야 하구요, 안타깝게도 이 책에는 예제소스가 없습니다 ㅠ_ㅠ 하지만 직접 자신이 한줄 한줄 코드를 짜보는 것이 더 의미 있다고 생각해서 ! 이 부분은 단점보단 장점일 수도 있겠네요, 한 달정도 책을 읽으면서 좀 어려웠습니다. 뒤로 갈 수록 문제 난이도도 좀 어려워지지만, 책의 오탈자가 좀 많은 편입니다. 여러분들도 유심히 보시면 찾으실 수 있으실텐데요, 너무 이해가 안되시면, 이 수식이나 글이 잘못해석 된 것은 아닐까...? 라는 한번의 의심 정도는 해주세요 ^^ 이 책은 이론적으로 알고리즘을 학습한 경험이 있는데, 문제 풀때 어떻게 적용해야 될지 모르겠다 라고 하시는 분들께 많은 도움이 될 것 같습니다. 무조건적인 따라하기 식이 아닌, 자신이 직접 생각해보고 문제를 해결한다음 해설을 보신다면 더더욱 도움이 많이 될 것 같네요.!!! 오늘도 좋은 하루 보내세요 ! ^^ |
|
개발과 알고리즘의 관계가 얼마나 있을까 고민을 해보면서 알고리즘은 수학의 미적분처럼 깊이 들어가게 되었을 때 하는 것이 아닌가 하면서 프로그래밍 공부와 알고리즘 공부를 나누어 본다면 보통 프로그래밍 공부를 더해야지 하는 생각을 하는 사람들을 보게 되었다. 수학의 미적분처럼 알고리즘도 로직이 복잡하기에 머리 쓰기를 싫어하는 사람들도 있었고 개발자가 되고 싶고 처음 하는 초보들이 다가가기 쉽지 않아 했었다. 하지만 미적분이나 알고리즘 같은 것도 한번 어떻게 풀어나가는지를 알게 되면 이게 그렇게 어려운 것이 아니구나라는 생각이 들게 된다. 어떤 일이든지 처음 하는 것이 어렵기 마련인데 익숙해지고 계속 사용을 하므로 효율적으로 사용을 할 수 있게 된다. 개발자가 되는 과정 중에서 먼저 개발자의 길을 걸어온 사람들이나 나와 비슷한 입장의 개발자들과 이야기를 해보면서 프로그램이 어떻게 돌아가는지 동작원리는 어떻게 되는지 등 가장 먼저 해야 하는 개발환경 갖추기와 기획부터 개발까지 프로그래밍 언어에 대한 범위가 웹프로그램을 만들기 위해서도 html, css, javascript, jsp, php, asp 등 알아야 하는 언어들도 적지 않게 많이 있다. 이로 인해서 알고리즘을 생각하지도 못해보고 여러 가지 언어들만 보는 그러한 문제점이 생겨나기도 하였다. 저도 웹 프로그래밍을 하고 있는 중에 여러 가지 언어들을 접해보면서 클라이언트 언어와 서버 언어 등을 배우고 같은 길을 걸어가는 사람들과도 이야기를 하게 되는데 알고리즘에 신경 쓰기보다 프로그래밍에 더 신경을 쓰는 측에 더 가까웠고 정말 좋은 개발자로서 좋은 프로그램을 만들고자 한다면 프로그램에 대한 불필요한 소스들은 줄여가고 최고의 성능을 만들 수 있도록 로직을 짤 수 있어야 한다고 생각한다. 공부에 대해서는 끝이 없다고 하는데 좋은 개발자가 되기 위해서는 알고리즘은 필수라고 생각하고 있었다. 하지만 좀처럼 시간을 내지 못하고 있었지만 개발을 처음 하는 초보더라도 반복문, 조건문, 배열을 잘 이해하고 있다면 탑코더의 알고리즘 문제를 풀어보는 것이 좋다고 한다. 알고리즘을 프로그래밍을 마스터 하고 해야한다는 생각은 잘못된 생각인 것 같았다. 물론 마스터 하고 알고리즘을 하는 것도 좋지만 마스터를 한다고 해도 알고리즘에 대해 생각하고 풀어보는 시간도 많이 필요하기에 자꾸 접해 보는 것이 중요하다고 생각한다. 알고리즘에 대한 중요성은 머릿속에 있었지만 탑코더 같은 사이트를 활용하지 않았었고 프로그래밍 공부 먼저하자가 우선이었었지만 초보 일 때 알고리즘을 해봄으로써 처음부터 잘 풀어지지는 않겠지만 문제를 해결하는 능력을 키워가므로 실력이 향상된 다는 것을 명심해야겠다는 생각을 하게 되었고 아직 대회나 탑코더 커뮤니티 같은 사이트를 잘 이용하고 활용할 줄 몰랐었지만 작품위주대회, 단시간 알고리즘 대회, 장시간 알고리즘 대회 등에도 도전을 해보면서 기초를 튼튼하게 하면서 프로그래밍 실력을 향상시켜야겠다고 생각나게 해준 책이었다. |