반응형

오랜만에 다시 읽게 되는 알고리즘 책이다. 이 책에 나오는 주요 알고리즘에 대한 내용은 다음과 같다. 

문제해결, 알고리즘 분석
해싱, 힙, 정렬, 이진트리, 그래프

우리가 알고리즘 공부를 할때 기본적으로 배워야 하는 알고리즘 들이다. 약간 전공서적 같은 느낌이 들긴 하지만 그것보다는 내용이 좀더 친절하게 나와 있다.

히자만 읽다보면 어려운 내용들이 많이 섞여 있다. 기초에 관련된 책이긴 하지만 난이도는 있는 책이다. 그리고 주요 코드들은 파이썬으로 되어있는데 파이썬을 모른다고 하더라도 크게 문제가 될것 같지는 않다. 코드 부분에 대한 설명은 거의 라인 단위로 설명을 해주고 있기 때문에 어떤 언어든 프로그래밍을 해본 사람이면 이해할수 있을 것이다. 

복습 차원에서 각 장 마지막에 있는 연습문제들은 한번씩 스스로 풀어보면 도움이 많이 될것이다. 어찌됐건 알고리즘 관련된 내용들은 이해도 이해 이이지만 한번씩 스스로 풀어보는게 중요하기 때문이다. 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

728x90
반응형
반응형

이 책을 읽기전에 저자의 알고리즘 동영상 강의를 몇번 본적이 있었다. 그래서 이 책이 나왔을때 어떤 내용으로 구성이 되어있을지 궁금했다. 그런데 마침 이렇게 한빛미디어 나는 리뷰어다를 통해서 리뷰를 작성하게 되었다.

- PART 01

처음에는 코딩 테스트, 또는 알고리즘 문제 풀이를 어떻게 준비를 해야 하는지 사전 지식을 알려준다. 코딩을 위한 준비라든지 최근 몇년간 코딩테스트 유형들을 설명해준다. 그리고 취업관련 프로세스나 준비 방법들도 간단히 소개해 주고 있다.

- PART 02 ~ PART 03

PART02 와 PART03 에서는 본격적으로 코딩테스트를 위한 이론과 기출을 풀어볼수 있다. PART02 에서는 주요 알고리즘에 대한 설명과 연관된 문제를 풀어볼 수 있다. 알고리즘 관련된 책들이 비슷한 구성을 가지고 있다고 생각이 되는데 각각의 특징은 설명을 어떻게 해주냐인것 같다. 이 책은 그런점에서 이해하기 쉽게 설명을 해주고 있다. 그리고 그림이나 음영을 적절하게 써줘서 읽어보는데 지루하지 않았다.

- PART 04

이 책의 코드들은 파이썬으로 되어있다. 그렇기 때문에 파이썬에 대해서 알 필요가 있는데 모른다고 해서 책을 못읽는 것은 아니다. 이렇게 부록에 파이썬 문법들을 넣어줬다. 물론 파이썬에 대한 모든 내용들이 들어간것은 아니지만 코딩테스트 문제를 풀기 위해서 이정도 알고 있으면 충분히 문제 푸는데에는 문제가 없을것이다. 그리고 코딩테스트 코드 작성시 유용하게 사용되는 패턴들도 있어서 참고하면 문제 푸는데 많은 도움이 될것같다.

그리고 앞에서 설명했던 알고리즘들 이외에도 코딩테스트에 유용한 알고리즘들이 부록에 많이 담겨져 있다. 우리가 수학으로 배웠던 내용들이 주로 포함되어 있다. 나같은 경우에도 실제로 코딩테스트 문제에서 알고 있으면 쉽게 풀었지만 막상 모르고 풀면 코드 작성하기가 힘들었던 문제 유형들이다. 

- 온라인 강의

마지막으로 이 책의 온라인 강의를 볼수 있다.  요즘 책들은 거의 온라인 강의를 포함하는 경우가 많은데 이 책도 이렇게 저자의 온라인 강의를 볼 수 있다. 책은 책대로 읽고 온라인 강의도 본다면 이해하는데 도움이 될것이다. 이 책 보기전에도 몇번 동영상 강의를 봤었는데 저자분이 목소리가 낮고 차분하고 과장되지 않아서 귀에 더 잘 들렸다. 

- 마무리

코딩 테스트라는게 아무래도 이론만 가지고는 결과를 보는건 거의 불가능한 시험이다. 얼마나 많이 풀어보고 다양한 유형의 문제를 경험해봤는지가 가장 중요하다고 생각한다. 그렇다는건 결과적으로 내가 많이 문제를 풀어봐야 한다.어떤 알고리즘책을 읽든 그것은 변하지 않는다. 하지만 처음 코딩테스트를 준비하거다 기본부터 파이썬으로 준비를 하고 싶은 분들에게는 한번쯤 읽어보면 꼭 도움이 될거라 생각이 든다.

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

728x90
반응형
반응형

 

인사이트에서 진행하는 신간 리뷰어로 선정되어서 책을 읽게 되었다. 

 

C++ 이지만 이해할 수 있다.

 

대부분의 알고리즘 책들이 그렇듯이 이 책도 C++ 코드로 설명이 되어있다. 프로그래밍 경진대회에서 가장 높은 비율로 많이 사용되는 언어인데 효율적이며 표준 라이브러리에 많은 양의 자료 구조와 알고리즘이 포함되어 있기 때문이라고 한다. 나같은 경우는 java 만 주로 하고 C++ 은 대학때 이후로 안했지만 책을 이해하는데에는 어려움이 없었다. 우선 소스코드가 길지 않고 문법상 큰 차이가 없다. 그리고 코드에 대한 설명이 글과 그림을 통해서 자세히 설명이 되어있다. 오히려 다른 언어(나같은 경우는 java)를 사용해서 C++ 로 구현된 코드를 변경해 보면서 공부를 하면 더 도움이 된다. 

 

프로그래밍 기법에 대한 설명

 

알고리즘 문제를 풀기 위해서는 문제에 대한 이해도 필요하지만 이해한 내용을 코드로 옮기는 능력도 필요하다. 연필로 종이에 써가면서 문제 푸는 방법은 알았는데 이걸 코드로 옮기지 못하면 못푼거나 마찬가지 이다. 이때에 필요한 것들이 프로그래밍 기법이다. 자주 나오는 몇가지 들이 있는데 알고 있으면 정말 많은 도움이 된다. 그중에 하나로 나도 전에 알고리즘 시험볼때 자주 썼던 건데 바로 나머지 연산이다. 

 

전에 나머지 연산을 위와 같은 방법으로 사용할 때에는 그냥 모르고 사용을 했다. 그냥 공식을 외운거였다. 그런데 고맙게도 이 책에서 설명을 해준 덕분에 이해를 할 수 있었다. 이런 기법들은 있는지도 모를 뿐더러 찾기도 어렵다. 하지만 모르는 순간 다푼 문제가 시간초과를 겪거나 자릿수가 너무 많아져서 에러가 나는 경험을 하게 된다. 그래서 이책에서 알려주는 몇가지 기법들은 문제를 푸는데 꿀팁처럼 도움이 된다. 

 

문제에 대한 자세한 설명

 

나는 문제풀때 가장 어려웠던 분야가 동적계획법(DP:Dynamic Programming)이었다. 점화식을 구하면 50줄도 안되는 코드만 써도 문제가 풀리지만 그걸 도출해내지 못하면 그냥 포기해야 했다. 그런데 고맙게도 이 책에서 이렇게 자세히 설명을 해주면서 알려주고 있다. 어떤 책들은 그냥 말로만 설명해주고 끝나는 경우가 있는데 이 책에서는 그림과 공식을 설명해 주고 어떻게 도출되는지 과정도 설명을 해주고 있다.

 

그리고 다른 챕터들도 마찬가지 이지만 처음에는 트리, 동적계획법, 정수, 행렬등 기본적인 개념을 설명을 해주기 때문에 문제의 유형에 대해서도 파악을 할 수 있다. 

 

수학에 대한 작은 부록

 

책 마지막 부분에는 이렇게 수학공식과 기본적인 내용이 담겨져 있다. 페이지 수는 그렇게 많지는 않다. 하지만 내가 생각하기에는 그 내용이 고등학교 정석책 기준으로 상당한 분량을 차지할거라 생각이 된다. 가끔 문제를 풀다 보면 분명 중,고등학교 때에 배운건데 기억이 나지않을때가 있다. 그 공식만 알면 풀릴것 같은 문제인데 도저히 생각이 안날때가 있다. 이 부록을 통해서 조금이나마 그런 내용들을 기억 속에서 되살리는데 도움이 될거라 생각된다. 

 

 

결론

내가 이 책을 읽으면서 들었던 느낌은 "어! 이 책 제법 재미있네!" 였다. 읽으면서도 왠지 노트를 꺼내서 연필로 코드를 짜봐야 할것 같고 맞는지 틀린지 실행을 해봐야 할것 같은 느낌이 들었다. 위에서도 말했듯이 실제로 C++ 로 설명된 코드를 Java 로 옮겨보면서 책을 읽어가고 있다. 길지않는 챕터에 핵심과 요점들이 가득 담겨 있어서 나는 정말 만족하면서 읽고 있다. 물론 이건 사람마다 차이가 있을 수는 있다. 하지만 분명한건 어느 정도 코드를 작성할 수 있고 이해할 수 있는 사람이 알고리즘 책을 추천해 달라고 한다면 이 책을 추천해주고 싶다. 

 

728x90
반응형
반응형

 

우리가 살고 있는 지금 이 순간에도 알게 모르게 알고리즘의 영향을 받고 있다. 인터넷을 통해 검색을 한다든지 쇼핑몰에서 제품을 검색한다든지, 그 순간 순간 마다 우리는 모르지만 알고리즘에 의해서 우리의 행동들이 하나 둘씩 어딘가에 쌓이고 있다. 그리고 가끔 브라우저에 보이는 광고를 보고 놀라게 된다. 왜냐하면 내가 최근에 관심있어 했던 물건들의 광고들이 자주 보이기 때문이다. 

 

이처럼 알고리즘은 내가 의식하지 못한 곳에서 나에 대해서 많은 것을 배우고 있고 알아가고 있다. 

 

그중 내가 이 책에서 흥미로웠던 부분에 대해서 이야기 하자면 바로 넷플릭스에 대한 내용이었다. 

 

넷플릭스가 배달을 통해서 서비스 할 때에는 사람들의 성향을 파악하는 데에 제품에 대한 평점을 중요한 정보로 취급을 했다. 하지만 여기에는 몇가지 한계가 있었다. 사람들이 영화를 보고 싶은 그 순간 부터 영화가 배달되는 그 시점까지는 딜레이가 존재할수 밖에 없다. 영화가 배달되기까지 시간이 걸리기 때문이다. 그러면 그 영화에 대한 평점이 영향을 받을 수 도 있다. 또 평점의 대상이 모든것을 퉁쳐서 하나로 하면 간단하지만 영상, 음향, 스토리 등으로 세분화 해서 평점을 받기는 쉽지가 않다. 그게 바로 기존의 한계 였다. 


지금의 넷플릭스에서는 영화를 추천을 해주지만 그 기준에는 평점은 존재하지 않는다. 사용자들이 시청한 시간, 끝까지 봤는지 여부, 중간에 멈춘 시간, 앞으로 돌리거나 뒤로 돌리는 행위등 모든 것들이 추천의 기반이 된다. 그만큼 지금은 영화를 보는 사용자에 대해서 많은 정보를 얻을 수 있고 그것을 기반으로 한 추천들이 매우 효과적이다는 것이다. 

유효 계산 가능성

책에 자주 언급된 단어인데 내가 이해한 바로는 이렇다. 
데이터들을 모이게 되면 이 데이터를 가지고 계산을 할 수 있게 된다. 숫자를 모아 놓지는 않았지만 계산이 가능한 형태가 된다. 그리고 여러 분야, 상황에 대해서 데이터가 쌓이게 되면 계산을 할수 있는 범위도 확장이 되고 예측이 가능해진다.  그리고 그것을 하고 있는게 바로 알고리즘이다.

 

이렇게 내가 몰랐던 부분에 대해서 설명을 해주고 있어서 읽는 동안 고개를 끄덕이는 경우가 많았다. 그런데 그만큼 아쉬웠던 점도 있었다.

 

- 책에서 예로든 몇가지 사례들이(그녀, 스타트랙, 하우스 오브 카드) 내가 보지 않았기 때문에 이해하기가 어려웠다. 

- 문장이 매끄럽지 않다는 느낌을 많이 받았다. 문장 길이가 길고 번역한 형태의 문장들이 많아서 읽고 있는데 무슨 말이지?? 라는 생각을 많이 했다. 

 

문장은 그렇다 치더라도 내용에 대해서는 내가 저 작품들을 보고 난 후에 다시 읽어본다면 이 책을 이해하는데 더 도움이 될거라 생각이 되었다. 

 

728x90
반응형
반응형


요즘 기업에서 코딩 테스트를 중요시 하다 보니 알고리즘 관련 책들이 많이 나오고 있다. 나도 1년전에 회사에서 진행하는 코딩 자격시험 준비때문에 여러가지 알고리즘 책들을 많이 봤었다. 물론 패스하고 난 후에는 좀 안보긴 했지만. 

그런데 알고리즘 공부를 하다 보면 부딪치는게 있다. 바로 수학이다. 특히 확률, 경우의 수와 같은 내용들은 시험에도 응용해서 자주 나오는 편이었다. 분명 중,고등학교때에 배운 내용인데도 지금은 하나도 생각이 안난다. 그래서 수학 공부를 해불까라는 생각도 자주 했다. 그런데 범위가 넓다보니 뭐부터 시작을 해야할지 좀 막막했었다. 그렇다고 수학의 정석을 처음부터 공부할수도 없는 노릇이다. 


1. 나는 알고리즘 공부를 하고 싶다. 

2. 나는 수학도 공부를 하고 싶다. 단 수학에 대한 인물들에 대해서도 좀 알고 싶다. 


이게 바로 내가 바라는 것이었다. 알고리즘 책을 보면 알고리즘 내용만 나오고 , 수학책을 펴면 수학만 나오고. 아직 그걸 연결 시킬정도의 실력은 안되니 어떻게 해야 할지 난감 했는데 이번에 받은 책이 딱 거기에 부합하는것 같다. 



일단 알고리즘 책이니 알고리즘에 대한 내용이 나오는것은 당연하다. 그런데 이렇게 알고리즘을 수학적으로 설명을 해준다. 수학적이라고 해서 그렇게 난이도가 높지는 않다. 그냥 차분히 읽었을때 분명 이해를 할 수 있을 정도이다. 용어에 대한 정의가 생각이 안나서 찾아 볼 수는 있지만 그래도 책 안에서 모든 내용을 이해할 수 있다. 읽다보면 예전에 중,고등학교때에 배웠던 내용들도 생각이 나면서 재미있다.



그리고 주목할 만한 내용으로는 수학이나 알고리즘에 대한 설명만 있는게 아니라 그것을 만든사람, 또는 관련있는 사람에 대해서 짧게나마 설명을 해준다. 내가 위에서 언급했던 2가지 조건을 딱 충족하는 부분이다. 전에 수학에 대해서 책을 좀 볼까 라고 마음 먹고 책을 좀 찾아봤었는데 보통 인물 도감 같은 느낌의 책들이 많았었다. 그런데 이 책은 이렇게 중간중간 내용을 넣어줘서 책을 좀더 재미있게 읽을 있었다.


알고리즘과 수학에 지식을 동시에 충족 시키고 싶은 분들에게 이 책을 추천해주고 싶다. 





728x90
반응형
반응형


한빛 미디어의 "나는 리뷰어다" 를 통해서 Think Data Structures (자바로 배우는 핵심 자료구조와 알고리즘) 책을 받게되었다. 전에 한빛 미디어 사이트를 들어갔을때 어떤 책인지 궁금했었는데 이렇게 타이밍 적절하게 책을 읽게 되었다. 


우선 이책은 그냥 알고리즘 책이 아니다. "자바로 배우는" 알고리즘 책이다. 그렇기 때문에 자바 코드를 읽을 수 있어야 한다. 저자도 책의 머릿말에 사전 준비사항으로 자바를 언급하면서 익숙하지않은 독자들은 "Think Java", "Head First Java" 책을 권해주고 있다. 


자바의 Collection 과 알고리즘


이 책에는 Java Collection들이 많이 나온다. LinkedList, Map, ArrayList 등등. 알고리즘을 설명하면서 거기에 맞는 클래스를 구현한다. 구현을 하다 보면 우리가 Java 에서 사용하는 Collection 클래스가 만들어진다. 그래서 그저 import만 해서 노출된 메서드만 사용하는것을 넘어서 그 클래스가 어떻게 동작하는지 이해할 수 있게 된다. 그리고 각각의 실습을 통해서 실제로 적용해볼 수 있도록 유도한다. 



알고리즘과 적용


알고리즘에 대한 설명과 더불어 위키피디아 웹 클롤러나 인덱서를 실제로 구현해 볼수도 있다. 책에서는 간단하게 구현하고 설명하고 있지만 그 작동 원리를 이해하는데 많은 도움이 된다. 어떤 알고리즘을 적용해야 하는지 어떻게 구현해야 하는지 생각하고 실습하다 보면 더 이 책의 재미에 더 빠져들 수 있다. 



이책이 나에게 다른 알고리즘 책에 비해서 좀더 친숙하다고 생각한 것은 Java 로 된 소스코드 때문이다. C 나 파이썬이 아닌 Java 로 되어있었기 때문에 나에게는 더 유익했고 이해가 쉬웠다. Java 개발자라면 한번쯤 읽어보고 내가 그동안 썼던 라이브러리들에 대해서 다시 생각해 볼 수 있는 계기를 마련해줄수 있는 책이다. 


728x90
반응형
반응형


한빛 리더스 활동이 마감되고 새롭게 시작된 "책 읽는 프로그래머" 에서 기존 OB 멤버들을 대상으로 리뷰 이벤트를 했다. 한빛리더스 14기가 예상보다 빨리 끝나서 좀 아쉬웠는데 이렇게 이벤트가 진행이 되서 좋았다. 내가 선택한 책은 "창의적은 문제 해결 능력을 키워주는 IT 퍼즐" 책이다. 총 65개의 퍼즐 문제를 풀어보는게 이 책의 내용이다. 간단한 문제들을 통해서 알고리즘에 대한 내용도 책에 포함되어있다. 먼저 퍼즐을 풀어보고 퍼즐을 풀기 위한 원리에 대해서 알아보고 또 그것을 실제 소프트웨어에 어떻게 적용되는지 스크래치를 이용해서 만들어보는것 까지 하나의 사이클로 되어있다. 



문제에 대해서는 바로바로 다음장에 답이 나와있다. 보통은 이런 문제를 푸는 내용의 책에서는 답은 맨 뒷부분에 따로 나와있는데 이 책은 문제 다음에 바로 나온다. 그래서 그부분이 살짝 아쉬운 부분이었다. 무심코 넘겼는데 답이 먼저 눈에 들어와 버리는 경우가 생길수 있기 때문이다. 일단 답이나 단서가 눈에 들어오고나면 거기에 대해서 계속 신경이 씌여서 더 다양한 생각을 하지 못하게 된다. 그래서 답은 책 뒤에 따로 나왔으면 더 좋았을것 같다.



각각 퍼즐, 사고력UP, 프로그래밍 파트를 선택해서 볼수 있도록 색깔로 표시를 해놨다. 앞에서 말했듯이 퍼즐은 실제 문제를 푸는 부분이고 사고력UP 은 문제에 필요한 원리에 대해서 알수 있는 영역이다. 그리고 프로그래밍은 실제 문제 푸는것을 구현해 보는 영역이다. 



어린이와 청소년들이 좀더 쉽게 이해하고 재미있게 접근 할수 있도록 그림을 많이 이용해서 설명을 해주고 있다. 사고력 UP 에서 나오는 내용들은 알고리즘 관련 내용도 있지만 컴퓨터 프로그래밍에 필요한 기초적인 수학 내용도 담고 있어서 컴퓨터 기본 지식을 쌓는데 도움이 될것 같았다. 물론 초등학생한테는 좀 어려울것 같고 중고등학생 정도 되면 학교 수학시간에 배우는 부분과 겹치는게 있어서 좀더 관심을 갖을것 같다. 

그리고 스크래치 프로그램은 관심은 있었는데 아직 해보지는 않았다. 한번 해봐야지 라고 생각만 하고 미뤄둔게 계속 시간만 지나고 있다. 이 책에 나오는 내용들을 직접 만들어 보면 내용을 이해하는데 더 도움이 될것 같다. 


http://cafe.naver.com/scratchprogramming


그리고 이 책에 궁금한 점이나 도움을 받아야 할 부분이 있다면 이렇게 카페가 개설되어있어서 도움을 받을 수 있다. 또 책 이외에 다른 내용들도 많이 있어서 들어가서 보면 공부하는데 도움이 된다. 


퍼즐 문제를 다룬 책이지만 "사고력UP" 같은 내용은 컴퓨터, 수학 에 대한 기초지식에 도움이 되서 교양서적으로 생각해도 될 정도이다. 한번에 쭉 읽어야 된다는 부담감도 없고 잠깐 시간이 있을때 퍼즐 하나 풀어보면서 머리를 식힐수 있는 재미있는 책이다. 


728x90
반응형
반응형


알고리즘에 대한 관심이 많아지면서 서점에는 관련 서적들이 쏟아져 나왔다. 나도 전공이 컴퓨터 공학인지라 관심있게 보는 분야 중 하나이다. 그런데 볼 때마다 느낀점은 좀더 쉽게 설명해줄 수는 없을까라는 아쉬움이었다. 물론 책을 쓴 저자는 쉽게 쓰려고 노력을 했겠지만 내가 이해할 수 가 없어서 좀더 쉬운책을 찾아보게 되었다. 한빛미디어 "나는 리뷰어다" 로 선정되어서 이 책을 받게 되었는데 책 표지부터 상당히 맘에 들었다. 알고리즘 관련 책인데 고리타분한 딱딱한 디자인이 아니어서 쉽지 않은 내용을 쉽게 설명을 했을것 같은 느낌이 들었다. 


책 내용을 살펴보면 우선 그림이 많다. 설명도 설명이지만 그림을 활용해서 쉽게 이해할 수 있도록 내용을 구성해 놨다. 그림 느낌이 약간Head first 시리즈에서 봤던 그림체라는 생각이 잠깐 들었다. 책 내용에 색깔도 있어서 책을 읽는데 지루하지가 않았다. 프로그래밍 책 하면 코드와 글자로 구성이 되어있으면서 온통 검정색 글씨로 도배가 되어있는데 이 책은 그렇지 않았다. 책을 읽는데 부담도 없고 그림책 읽는 듯한 느낌이 들었다. 


 

그리고 컴퓨터 서적에 각 챕터마다 빠지지 않는 요약과 연습문제가 있다. 각 챕터에서 설명했던 내용들을 간단하고 쉽게 정리를 해두었다. 그리고 내용을 반복할수 있도록 연습문제도 포함되어있다. 연습문제라고 해서 그렇게 어렵지는 않고 공부했던 내용을 잘 생각해보면 충분히 풀수 있는 수준이다. 문제의 정답은 책 마지막 부분에 있다. 

마지막 챕터에서는 이 책에서 자세히 설명하지 않은 다른 알고리즘들에 대해서 간단히 소개를 해주고 있다. 그래서 추가적으로 공부해야 할 것이 무엇인지, 아니면 내가 관심있어 하는 알고리즘이 어떤 알고리즘인지에 대한 방향성을 부여해줄 수 있다. 

https://github.com/egonSchiele/grokking_algorithms

책에서 설명된 github 에 가면 알고리즘의 소스코드를 확인해 볼 수 있다. 스스로 직접 코딩을 해보는 것이 가장 좋은 방법이지만 참고할 자료가 있다는것도 충분히 도움이 된다. 책으로 읽었던 내용을 코드를 봄으로써 좀더 이해가 빨라질 수 있기 때문이다. 처음에는 python으로 코드가 되어있다고 했었는데 직접 들어가 보면 python, ruby, java, javascript 등 다양한 언어로 코드가 작성되어있다. 내가 직접 코드를 작성해보고 비교해보는것도 좋은 학습 방법이 될수 있을것 같다.

알고리즘에 대한 설명을 마치 동화책처럼 내용을 만들어서 쉽게 이해하고 접근할수 있도록 해주는 책이다. 처음 알고리즘을 공부하는 사람이 기초를 잡기 위해서 한번쯤 읽어본다면 많은 도움이 될것 같다. 

"Hello Coding 그림으로 개념을 이해하는 알고리즘" 의 자세한 내용은 한빛미디어 홈페이지에서 확인할 수 있다.


Hello Coding 그림으로 개념을 이해하는 알고리즘
국내도서
저자 : 아디트야 바르가바(Aditya Y. Bhargava) / 김도형역
출판 : 한빛미디어 2017.04.01
상세보기


728x90
반응형
반응형


알고리즘(라틴어독일어: Algorithmus, 영어: algorithm 알고리듬[*]IPA[ǽlɡərìðm])이란 어떠한 문제를 해결하기 위한 여러 동작들의 모임이다. 유한성을 가지며, 언젠가는 끝나야 하는 속성을 가지고 있다. 수학과 컴퓨터 과학에서 알고리즘이란 작동이 일어나게 하는 내재하는 단계적 집합이다. 알고리즘은 연산, 데이터 진행 또는 자동화된 추론을 수행한다.

출처 : https://ko.wikipedia.org/wiki/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98


알고리즘은 문제 해결 능력이다. 

문제를 푸는 방법에는 여러가지 방법이 있을 수 있다. 하지만 각각의 해결 방법들은 비용과 시간이 다르다. 우리는 최소한의 비용과 시간으로 문제를 해결하기 위해서 알고리즘을 적용한다. 


얼마전에 회사에서 보는 알고리즘 시험을 드디어 통과를 했다. 거의 1년 만이다. 매주 주말마다 출근을 하는 것처럼 하루를 소비했다. 

처음 시작할때에는 분명 의욕이 있었다. 개발을 하니깐 전혀 관련이 없는 것도 아니고 배워둬서 나쁠것도 없다고 생각을 했다. 백준 온라인 저지나 정올 사이트에서 문제를 하나씩 풀어보기도 했다. 항상 잘 풀리지는 않았지만 그래도 한문제 해결하고 나면 뿌듯함이 있었다.  그런데 기간이 일주일, 이주일, 한달, 두달 길어지니깐 피로가 쌓였다. 주말에 계속 나가는것에 대한 육체적 피로도 있었지만 정신적 피로가 더 컸다. 


'내가 이것을 풀수 있을까? 공부해서 뭐해? 어짜피 시험 문제 나오면 못푸는데? 이건 내가 풀수 있는 문제가 아니야.'


이런 생각들이 점점 커져갔고 어느샌가 문제 풀이 연습도 안하게 됐다. 매주 보던 시험을 한달에 2번정도로 줄였다. 예전에는 문제를 풀어보려고 끝까지 낑낑대며 머리를 쥐어 짰다면 이제는 딱 봐서 못풀겠다 싶으면 그냥 나왔다. 이런 패턴이 반복되니 기존에 알고 있던 알고리즘들 조차도 구현 방법이 가물가물 해져갔다. 언젠가는 합격하긴 하겠지라는 밑도 끝도 없는 이상한 믿음만 있을 뿐이었다. 


그러던 중 한번의 기회가 찾아왔고 그 기회를 운좋게 잡았다. 풀긴 풀었지만 이건 내가 생각해봐도 운이 좋았다고 밖에 할수 없었다. 기존에 봤던 시험보다는 확실히 난이도가 낮았다는 느낌이 들었다. 문제를 읽으면서도 이건 풀겠는데 라는 생각이 들었다. 테스트케이스가 다 맞고도 혹시나 해서 몇번을 더 돌려봤다. 시간도 범위 안에 잘 들어온다. 그리고는 난 시험장을 나왔다. 그리고 시험을 통과를 했다. 


아주 긴 시간이 걸렸지만 어쨌든 결과물을 만들어냈다. 하지만 뭔가 씁쓸한 아쉬움이 남는다. 분명 알고리즘을 하나씩 배워나가고 문제를 푸는게 싫지는 않다. 재미있다. 하지만 재미있는 일이 어느 순간 재미 없는 일이 되었다. 시험이라는 울타리가 없었다면 좀더 재미있게 공부도 하고 토론도 했을것 같다는 생각이 들었다. 


올해 들어서 알고리즘 관련 책들을 쳐다보지도 않았는데 시험을 합격한 이후에 관련 책을 읽기 시작했다. 정말정말 아이러니 하다. 지긋지긋 했던 "시험" 이 끝났기 때문에 이제는 즐길수 있을 만큼 여유가 생긴것 같다. 다시 되찾은 즐거움을 소중히 하고 앞으로도 내가 생각한 즐거움 들이 사라지지 않게 잘 지켜나가야 겠다.



728x90
반응형

+ Recent posts