본문 바로가기

알고리즘/종만북

(3)
무식하게 풀기 알고리즘 문제를 풀 때 공부를 열심히 할수록 복잡하지만 우아한 답안을 만들고 싶은 마음이 커지기 마련이고, 그래서 바로 앞에 보이는 쉽고 간단하며 틀릴 가능성이 낮은 답안을 간과하기 쉽다. 이런 실수를 피하기 위해 문제를 마주하고 나면 가장 먼저 스스로에게 물어보자. 무식하게 풀 수 있을까? 흔히 전산학에서 무식하게 푼다 (brute force)라는 말은 컴퓨터의 빠른 계산 능력을 이용해 가능한 경우의 수를 일일이 나열하면서 답을 찾는 방법을 의미한다. 이렇게 가능한 방법을 전부 만들어 보는 알고리즘을 가리켜 흔히 완전탐색(exhaustiive search)라고 부른다. 완전 탐색은 사실 컴퓨터의 장점을 가장 잘 이용하는 방법이다. 컴퓨터의 최대 장점은 결국 속도가 빠르다는 것이기 때문이다. 특히 현실세..
[종만북] 3부 좋은 코드를 짜기 위한 원칙. 간결한 코드를 작성하기: 프로그래밍 대회에서 코드를 작성할 때 첫번째 원칙은 간결한 코드를 작성하라는 것입니다. 코드가 짧으면 짧을 수록 단순한 버그가 생길 우려가 줄어들고, 디버깅도 쉬워집니다. 이 원칙은 어디에든 적용됩니다. 적극적으로 코드 재사용하기: 당장 차이점이 없더라도 항상 코드를 깔끔하게 작성하고 유지하는데 신경을 쓰다보면 스스로가 그와 같은 코드에 익숙해집니다. 간결한 코드에 익숙한 사람은 다음 번에 비슷한 코드를 짤 때 처음부터 좀더 간결하게 코딩할 수 있게 됩니다. 항상 같은 형태로 프로그램을 작성하기: 같은 코드를 작성하는 더 좋은 방법에 대해 꾸준히 고민할 필요는 있지만, 자주 작성하는 알고리즘이나 코드 등에 대해서는 한 번 검증된 코드를 작성하고 이것..
[종만북] 개관 ~ 2부 “잘하는 사람과 못하는 사람의 생산성 차이가 스무배" 이라는 말이 진지하게 나올 수 있는 분야가 컴퓨터 전공입니다. (Thinking in Java. 브루스에켈) 이런 현상의 가장 근본적인 이유는 대부분 컴퓨터 과학 교육 과정이 프로그래밍의 기술과 지식을 가르칠 뿐, 그것을 스스로 응용 할 수 있는 능력은 주지 못하기 때문입니다. 지식을 진정 자신의 것으로 만들어 활용할 수 있기 위해서는 학문이 발전하는 과정에서 일어난 발견과 깨달음을 학생 자신이 되짚어갈 수 있어야합니다. 프로그래밍은 문제 해결이다. 프로그래머가 사용하는 언어나 라이브러리, 알고리즘에 대한 지식들이 퍼즐의 조각이라면 문제 해결 능력은 적재 적소에 퍼즐 조각을 배치하고 이들을 연결해서 큰 그림을 만드는 능력이라고 할 수 있습니다. 02...