프로그래밍은 문제 해결이다
프로그램이 사용할 수 있는 최대 메모리와 사용자가 답답해하지 않게 하기 위한 시간 제한도 유의해야 하고, 이 와중에 가능한 한 재사용성이 높은 간결한 코드를 작성해야 한다. 이렇게 많은 제약 조건과 요구사항을 이해하고 최선의 방법을 찾아내는 능력은 분야를 막론하고 좋은 프로그래머가 되기 위해 필수적이다.
프로그래밍 대회에서 배울 수 있는 것들
- 인터페이스가 없는 단순한 Input, Output으로 문제해결에만 집중할 수 있다.
- 명시적인 시간 제한과 메모리 제한이 있다.
- 정답과 오답의 여부가 훨씬 명확히 가려진다.
- 프로그램의 실행 시간이나 메모리 사용량 관련 정보가 실시간으로 제공된다.
- 프로그램의 규모가 작아 작은 부분에 집중할 수 있는 계기를 만들어 준다.
- 경쟁하는 환경에서 코드를 작성하게 된다. 경쟁은 실력을 늘리기 위한 동기가 되기도 한다.
이 책의 구성
- 프로그래밍 대회의 문제 해결 방법론
- 코딩과 디버깅에 대한 주의사항
- 알고리즘의 정당성 증명과 효율성 분석
- 알고리즘 설계 기법
- 자료 구조
프로그래밍 대회
- 한국 정보 올림피아드(초, 중, 고등학생) : https://koi.or.kr/
- ICPC(대학생) : https://icpckorea.org/
- 탑코더(TopCoder) : https://www.topcoder.com/talent/single-round-matches/
추천 도서
- Introduction to Algorithms / Thomas H. Cormen, Charles E. Leiserson
- Programming Challenges / Steven Sol Skiena
- The Art of Computer Programming / Donald Ervin Knuth
- 프로그래밍 콘테스트 챌린징 / Takuya Akiba