이미 소장하고 있다면 판매해 보세요.
|
|
[01 | 프로그래밍 대회]
01_ 프로그래밍 대회 02_ 대회 참가의 장점 03_ 초보 프로그래머에게 좋은 프로그래밍 대회 [02 | TopCoder 참가 방법] 01 TopCoder 시스템 02 TopCoder 가입 방법 03 SRM 도전 04 SRM 참가 요령 [03 | 기본 프로그래밍 지식] 01 반드시 필요한 프로그래밍 지식 02 추가적인 프로그래밍 지식 03 정리 [04 | 시뮬레이션] 01 키위 주스 02 정리 [05 | 전체 탐색] 01 즐거운 파티 02 암호 03 재미있는 수학 04 회문 05 친구 수 06 다양한 형태의 전체 탐색 07 고장난 로봇 08 미로 만드는 사람 09 마법의 숫자 10 정리 [06 | 계산량] 01 실행 시간과 메모리 사용량 예측 02 정리 [07 | 동적 계획법과 메모화] 01 동적 계획법 기본 02 회사 조직과 급여 03 나쁜 이웃집 사람들 04 킹 나이트 체스 05 악수 06 정리 [08 | 탐색 범위 한정 알고리즘] 01 다양한 색상의 상자와 공 02 탐욕 알고리즘 03 주식 투자 시뮬레이션 04 배치 시스템 05 이분 탐색 06 자동차 대출 07 수학적 접근 방법 08 둥근 모양의 국가들 09 해밀턴 패스 10 정리 [09 | 응용 문제] 01 바이너리 플립 02 칸토어 먼지 03 Not Two 04 막대 자르기 05 무한 수열 06 바닥 타일 07 정리 [10 | 그래프 문제] 01 연결 판정 02 유향 그래프와 무향 그래프 03 가중 그래프 04 다익스트라 알고리즘 05 최소 신장 트리 06 변에 다양한 정보가 있는 그래프 07 정리 [11 | 수학 문제] 01 소수 02 최대공약수와 최소공배수 03 정리 |
|
옮긴이 서문
저는 프로그래밍 대회의 관점이 아니라 조금 다른 관점에서 이 책을 살펴보겠습니다. 모던 웹을 위한 시리즈를 집필하면서 가장 많이 받은 질문은 다음과 같습니다. “a 상황과 b 상황을 구분하려면 어떻게 해야 할까요?” 물론 답변은 간단하게 “조건문을 사용하세요”였습니다. 어떻게 보면 굉장히 황당하게 느껴질 수도 있습니다. 왜 계속 이러한 질문을 하는 것인지 궁금해서 질문자의 프로그래밍 공부 단계를 살펴보았습니다. 대부분 웹 개발과 스마트폰 애플리케이션 개발이 뜨면서 기본적인 프로그래밍 지식을 무시한 채로 프로그래밍 언어의 규정과 프레임워크의 사용법만 알고 무언가를 만들려는 사람이었습니다. 물론 이것이 나쁘다는 것은 아닙니다. 하지만 이렇게 공부한 사람은 웹 개발 서적과 스마트폰 애플리케이션 개발 서적을 보고 모든 예제를 따라서 진행한 후에 직접 무언가를 만들어보려 할 때 굉장히 사소한 것에 부딪치게 됩니다. 예를 들어 “특정한 지역의 치킨 집을 중복 없이 임의로 10개 추천해주는 스마트폰 애플리케이션”을 만든다고 합시다. 치킨 집과 관련된 데이터를 가져오는 것과 데이터를 사용자에게 보여주는 부분 자체는 “파싱”과 “리스트뷰”로 스마트폰 개발 서적에 나와 있을 것입니다. 하지만 “중복 없이 임의로 10개”를 구현하려면 어떤 방법을 사용해야 할까요? 이러한 것은 개발자가 스스로 생각해서 알고리즘을 만들어야 합니다. 이러한 알고리즘이 곧바로 머리에 떠오르지 않는다면 알고리즘과 관련된 프로그래밍 지식이 부족한 것입니다. 물론 너무 깊은 알고리즘까지 공부할 필요는 없습니다. 고등학교 때 미분과 적분을 배운 사람이라면 한 번쯤 “그런데 실생활에서 사용할 일이 전혀 없잖아?”라고 생각한 적이 있을 것입니다. 알고리즘도 너무 깊게 들어가면 일반적인 상황에서 전혀 사용할 일이 없는 것이 많습니다. 이 책은 알고리즘 책이지만 실용적인 부분을 자세하게 다룹니다. 따라서 알고리즘을 전문적으로 공부할 사람보다는 TopCoder 프로그래밍 대회를 준비하는 사람과 기본적인 알고리즘 개발 능력을 향상하고 싶은 사람에게 적합합니다. 번역할 수 있게 도와주신 한동훈 과장님과 책의 진행을 도와주신 박진희님과 안윤경님께 감사의 말씀을 드립니다. 옮긴이_ 윤인성 지은이 서문 프로그래밍 대회라고 하면 대부분 매우 어렵다고 생각합니다. 실제로 일본인 참가자가 많아진 것은 최근 몇 년입니다. 하지만 프로그래밍 대회는 오히려 초보자가 적극적으로 참가해야 하며 프로그래밍과 컴퓨터 과학 학습에 적극적으로 활용되어야 합니다. 요즘에는 프로그래밍 대회처럼 알고리즘을 빠르고 정확하게 작성하는 대회가 아주 많이 개최되어 일본 내에서도 참가자가 천 명이 넘습니다. 최근에는 AtCoder에서 정기적으로 대회가 개최되어 이전보다 대회에 쉽게 참가할 수 있게 되었습니다. 이 책을 진행하기 전에 필요한 지식은 for 반복문과 if 조건문, 배열 같은 기본적인 내용입니다. 이러한 내용을 알고 이 책을 진행하면 프로그래밍 대회의 세계에서 어느 정도 다른 사람과 경쟁할 수 있는 수준까지 될 것입니다. 또한 “알고리즘이란 무엇인가?”라는 기본적인 것부터 알고리즘을 어느 정도 다룰 수 있는 수준까지 될 것입니다. 물론 대회이므로 초보자가 모든 문제를 푼다는 것은 불가능합니다. 경험을 많이 쌓은 프로그래머라도 폭넓은 지식과 유연한 발상력이 없다면 대회에서 상위에 입상하기 힘들며 초보자가 그 정도를 해내는 것은 당연히 어렵습니다. 하지만 대회에 참가할 때 처음부터 상위를 목표로 할 필요는 없습니다. 이 책은 독자가 대회에 참가하는 것 자체를 즐길 수 있는 수준에 도달하게 만드는 것이 목표입니다. 물론 그것만으로는 재미가 없으므로 조금 더 나아갈 수 있는 지식도 제공합니다. 이 책처럼 프로그래밍 대회에 특화된 책은 최근까지 전혀 없었습니다. 많은 분이 이 책을 활용해서 프로그래밍 대회에 참가하고 즐길 수 있으면 좋겠습니다. 그리고 앞으로 프로그래밍 대회가 더욱 활성화되면 좋겠습니다. 마지막으로 이 책은 ITMedia에서 연재된 「최강 최속 애플리케이션 알고리즘 개발자 양성 강좌」와 애플리케이션 플래닛에서 연재된 「TopCoder 트레이닝 강좌」를 조합하고 수정해서 책에 추가했습니다. 이 책에 인용을 허락해주신 ITMedia의 니시오(西尾)님과 애플리케이션 플래닛의 비젠(備前)님께 진심으로 감사 인사를 드립니다. 지은이_ 타카하시 나오히로 ---본문 중에서 |
|
프로그래밍 실력은 하루 아침에 완성되지 않는다
열정이 아닌 기초를 튼튼하게! 프로그래밍은 열정이 아닌 실력으로 해야 한다. 실력의 기초는 알고리즘이며, 프로그래머의 문제 해결력은 알고리즘에서 판가름 난다. 알고리즘 실력을 키우는 가장 좋은 방법은 다양한 문제를 풀어보며 알고리즘을 적용해보는 것이다. 알고리즘 트레이닝으로 완성하는 프로그래밍 실력 알고리즘을 많이 안다고, 다양한 프로그래밍 언어를 사용할 줄 안다고 해서 프로그래밍을 잘 하는 것이 아니다. 수학 공식을 많이 알아도 문제를 풀어보며 연습하지 않으면 안 되는 것처럼 프로그래밍도 연습을 통해 문제 해결력을 키워야 한다. 알고리즘 트레이닝은 알고리즘이나 언어 사용법이 아닌 문제 해결력을 키우기 위한 훈련법이다. 전 세계 프로그래머와 경쟁하는 탑코더 탑코더의 알고리즘 대회는 SRM(Single Round Match)으로 주 1회 개최되며, 전 세계의 프로그래머가 이 대회에 참여한다. 75분간 문제를 풀이하고, 15분간 다른 사람의 버그를 잡는 도전으로 이뤄진다. 다른 사람의 버그를 잡아서 점수를 얻을 수 있고, 반대로 다른 사람이 여러분이 작성한 코드에서 버그를 찾아 감점할 수도 있다. 이렇게 시합 결과에 따라 점수가 매겨지고 등급이 매겨진다. 여기서 최고 등급을 레드 코더(red coder)라 한다. 이 책은 전 세계 프로그래머와 경쟁하는 탑코더에서 레드 코더가 되는 길을 안내한다. |