2. 발표 순서
I. 발표자 소개
II. 공부 전략
A. 공부 방법의 선택
B. 같이 공부하기
C. 깊게 공부하기
D. 효율적으로 문제 풀기
E. 실전감각 익히기
III. 마치며
3. 발표자 소개
- 이름 : 오현석
- 소속 : 부산대학교 정보컴퓨터공학부
- 핸들 : algoshipda
- 대회 참가 경험
- 2014 : ACM ICPC 대전 인터넷 예선
- 2015 : ACM ICPC 대전, SCPC, LG 코드챌린저 본선
- 2016 : ACM ICPC 대전, SCPC, LG 코드몬스터 본선
4. 알고리즘 공부를 시작한 계기
- C++ 프로그래밍 수업에서 독보적인 실력을 뽐내던 한 친구를 보고 ...
내가 더 잘하고 싶다.
- 처음 참가한 ACM ICPC 예선에서 무참히 짓밟히고 나서 ...
나도 본선에 가보고 싶다.
- 해보니 재밌어서.
5. 공부 전략
- 공부에 왕도는 없다.
- 사실은 지극히 주관적인 얘기.
- 경험하면서 느낀 것을 토대로 ...
7. 공부 방법의 선택
주제를 정하고 관련된 문제들을 풀기
vs
무작정 풀다가 모르는 주제를 만나면 공부하기
8. 공부 방법의 선택
상황에 따라 적절한 방법을 선택해야 함.
1. 프로그래밍 언어가 익숙하지 않다?
일단 쉬운 문제부터 무작정 풀기.
2. 언어는 익숙한데 공부를 시작한 지 얼마 되지 않았다?
기초 주제에 관한 문제들 풀기. (DFS, BFS, 다이나믹 프로그래밍 …)
9. 공부 방법의 선택
3. 기초 주제들을 어느 정도 공부했다?
무작정 풀다가 모르는 주제가 있으면 공부하자.
문제 해결의 재미를 느껴가면서 차근차근.
책을 한 번에 다 보려고 하면 안 된다. 필요할 때마다 한 주제씩
정복해나가자. (훑어보기 -> 한 주제 정복 -> 훑어보기 사이클)
13. 깊게 공부하기
1. 여러 자료로 공부하자.
- 같은 주제도 설명이 다른 경우가 많다.
- 어떤 설명이 내게 더 와 닿을지 모른다. 특히 코드의 경우.
- 구글링.
14. 깊게 공부하기
1. 여러 자료로 공부하자.
- 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략 (종만북)
- 프로그래밍 콘테스트 챌린징 (노란 책)
- Competitive Programming 3 by Steven Halim
- Introduction to Algorithms (CLRS)
15. 깊게 공부하기
1. 여러 자료로 공부하자.
- 코드포스 블로그 (새로운 공부거리를 잘 던져줌)
- 탑코더 알고리즘 튜토리얼 (초심자에게 추천)
- 기타 개인 블로그
16. 깊게 공부하기
2. 나의 언어로 설명해보자.
- 글로 써본다든가.. (블로그)
- 그럴 것 같다고 혼자 생각하는 것과 정말로 그렇다고 설명하는 것의 차이.
17. 깊게 공부하기
2. 나의 언어로 설명해보자.
- 내가 이해하기 쉬운 코드가 좋은 코드다. (일단은…)
잘 기억하는 방법
: 알고리즘을 내 나름대로 추상화해서 기억하자.
18. 깊게 공부하기
3. 자신이 직접 코드를 짜서 AC를 받고 넘어가자.
- 해답을 보고 이해했다고 해서 풀 줄 아는 문제가 되는 게 아니다.
- 짜보지 않으면 같은 문제가 나와도 못 풀 확률이 높다.
19. 깊게 공부하기
4. 복사 + 붙여넣기를 하지 말자.
- 비슷한 문제를 풀어서 재사용 가능한 코드가 있다고 해도 다시 짜자.
- 반복 숙달.
- 막힘 없이 코딩할 수 있는 능력.
- 디버깅 능력.
20. 깊게 공부하기
5. 문제의 유형을 세분화해두자. (당연히 풀이도)
예)
- DAG에서 최장경로 구하기
- 트리에서 최대 독립 집합 구하기
- 트리의 지름 구하기
- 이분 그래프 판별하기
...