Top Banner
초심자를 위한 알고리즘 공부 전략 오현석 [email protected]
33

두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

Apr 08, 2017

Download

Education

Startlink
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

초심자를 위한 알고리즘 공부 전략

오현석[email protected]

Page 2: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

발표 순서

I. 발표자 소개

II. 공부 전략A. 공부 방법의 선택B. 같이 공부하기C. 깊게 공부하기D. 효율적으로 문제 풀기E. 실전감각 익히기

III. 마치며

Page 3: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

발표자 소개

- 이름 : 오현석

- 소속 : 부산대학교 정보컴퓨터공학부

- 핸들 : algoshipda

- 대회 참가 경험- 2014 : ACM ICPC 대전 인터넷 예선- 2015 : ACM ICPC 대전, SCPC, LG 코드챌린저 본선- 2016 : ACM ICPC 대전, SCPC, LG 코드몬스터 본선

Page 4: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

알고리즘 공부를 시작한 계기

- C++ 프로그래밍 수업에서 독보적인 실력을 뽐내던 한 친구를 보고 ...내가 더 잘하고 싶다.

- 처음 참가한 ACM ICPC 예선에서 무참히 짓밟히고 나서 ...나도 본선에 가보고 싶다.

- 해보니 재밌어서.

Page 5: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

공부 전략

- 공부에 왕도는 없다.

- 사실은 지극히 주관적인 얘기.

- 경험하면서 느낀 것을 토대로 ...

Page 6: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

공부 방법의 선택

Page 7: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

공부 방법의 선택

주제를 정하고 관련된 문제들을 풀기

vs

무작정 풀다가 모르는 주제를 만나면 공부하기

Page 8: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

공부 방법의 선택

상황에 따라 적절한 방법을 선택해야 함.

1. 프로그래밍 언어가 익숙하지 않다? 일단 쉬운 문제부터 무작정 풀기.

2. 언어는 익숙한데 공부를 시작한 지 얼마 되지 않았다?기초 주제에 관한 문제들 풀기. (DFS, BFS, 다이나믹 프로그래밍 …)

Page 9: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

공부 방법의 선택

3. 기초 주제들을 어느 정도 공부했다?

무작정 풀다가 모르는 주제가 있으면 공부하자.

문제 해결의 재미를 느껴가면서 차근차근.

책을 한 번에 다 보려고 하면 안 된다. 필요할 때마다 한 주제씩 정복해나가자. (훑어보기 -> 한 주제 정복 -> 훑어보기 사이클)

Page 10: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

같이 공부하기

Page 11: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

같이 공부하기

- 동아리나 스터디 그룹.

- 온라인 저지의 커뮤니티. (BOJ, 알고스팟의 슬랙)

- 접할 수 있는 정보의 양이 다르다.

- 같은 문제를 놓고 토론하며 공부하기.

- 동반자 & 라이벌.

Page 12: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

깊게 공부하기

Page 13: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

깊게 공부하기

1. 여러 자료로 공부하자.

- 같은 주제도 설명이 다른 경우가 많다.

- 어떤 설명이 내게 더 와 닿을지 모른다. 특히 코드의 경우.

- 구글링.

Page 14: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

깊게 공부하기

1. 여러 자료로 공부하자.

- 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략 (종만북)

- 프로그래밍 콘테스트 챌린징 (노란 책)

- Competitive Programming 3 by Steven Halim

- Introduction to Algorithms (CLRS)

Page 15: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

깊게 공부하기

1. 여러 자료로 공부하자.

- 코드포스 블로그 (새로운 공부거리를 잘 던져줌)

- 탑코더 알고리즘 튜토리얼 (초심자에게 추천)

- 기타 개인 블로그

Page 16: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

깊게 공부하기

2. 나의 언어로 설명해보자.

- 글로 써본다든가.. (블로그)

- 그럴 것 같다고 혼자 생각하는 것과 정말로 그렇다고 설명하는 것의 차이.

Page 17: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

깊게 공부하기

2. 나의 언어로 설명해보자.

- 내가 이해하기 쉬운 코드가 좋은 코드다. (일단은…)

잘 기억하는 방법: 알고리즘을 내 나름대로 추상화해서 기억하자.

Page 18: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

깊게 공부하기

3. 자신이 직접 코드를 짜서 AC를 받고 넘어가자.

- 해답을 보고 이해했다고 해서 풀 줄 아는 문제가 되는 게 아니다.

- 짜보지 않으면 같은 문제가 나와도 못 풀 확률이 높다.

Page 19: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

깊게 공부하기

4. 복사 + 붙여넣기를 하지 말자.

- 비슷한 문제를 풀어서 재사용 가능한 코드가 있다고 해도 다시 짜자.

- 반복 숙달.

- 막힘 없이 코딩할 수 있는 능력.

- 디버깅 능력.

Page 20: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

깊게 공부하기

5. 문제의 유형을 세분화해두자. (당연히 풀이도)

예)- DAG에서 최장경로 구하기- 트리에서 최대 독립 집합 구하기- 트리의 지름 구하기- 이분 그래프 판별하기...

Page 21: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

효율적으로 문제 풀기

Page 22: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

효율적으로 문제 풀기

1. 한 문제에 오래 매달리지 말자.

- 시간을 정해놓고, 그 시간을 넘겨도 풀지 못하면 답을 보자.

- 고민하는 과정에서 배우는 것도 있지만,처음에는 일단 많은 풀이와 사실을 아는 게 더 중요하다.

Page 23: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

효율적으로 문제 풀기

2. 적정 난이도의 문제 풀기.

- 보자마자 풀 수 있는 문제는 나중에도 그럴 가능성이 높음.

- 어느 정도 생각해야 풀 수 있는 문제.

- 교훈이 있는 문제.

- 난이도가 보이는 문제들을 풀면 좋다. USACO를 추천.

Page 24: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

효율적으로 문제 풀기

2. 적정 난이도의 문제 풀기.

- 나와 비슷한 실력을 갖춘 사람이 몇 번 틀리고 푼 문제를 풀어보자.

Page 25: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

효율적으로 문제 풀기

3. 다른 사람의 코드를 보자.

- 다른 풀이 & 좋은 코딩법을 발견할 수 있다.

- 코드를 읽고 이해하는 능력을 키울 수 있다.

Page 26: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

효율적으로 문제 풀기

4. 풀이에 확신이 들 때 코딩을 하자.

- 풀이를 논리적으로 설명할 수 있어야 한다.

- 증명하는 습관.

- 어중간한 상태에서 코딩하면 코딩이 말리는 경우가 많다.

Page 27: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

실전 감각 익히기

Page 28: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

실전감각 익히기

1. 온라인 대회 참가하기 (탑코더, 코드포스)

- 제한시간이 있는 상황에서 연습해봐야 한다.

- 레이팅은 생각보다 정확.

- 매번 풀이가 올라온다.

Page 29: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

실전감각 익히기

2. 시간을 정해놓고 대회문제 돌기

- 시간 배분, 문제 경향 파악.

Page 30: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

실전감각 익히기

3. 오프라인 대회 많이 참가하기

- 오프라인 대회는 연습환경과 다르다.

- 운영체제, 키보드, 에디터 …

- 참고자료가 금지되는 경우도.

Page 31: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

여기까지

Page 32: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

마치며

- 가장 확실한 공부 방법은 거기에 정신과 시간을 많이 쏟는 것.

- 즐기지 못하면 지속하기 힘들다.

- 문제 해결의 좋은 점?걸어 다니면서도 할 수 있다.밥 먹으면서도 할 수 있다.

- 열심히 한 만큼 보상이 있을 것이다.

Page 33: 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한 알고리즘 공부 전략

감사합니다.끝