두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한...
Transcript of 두 번째 startlink.live: 오현석 (algoshipda) - 초심자를 위한...
발표자 소개
- 이름 : 오현석
- 소속 : 부산대학교 정보컴퓨터공학부
- 핸들 : algoshipda
- 대회 참가 경험- 2014 : ACM ICPC 대전 인터넷 예선- 2015 : ACM ICPC 대전, SCPC, LG 코드챌린저 본선- 2016 : ACM ICPC 대전, SCPC, LG 코드몬스터 본선
알고리즘 공부를 시작한 계기
- C++ 프로그래밍 수업에서 독보적인 실력을 뽐내던 한 친구를 보고 ...내가 더 잘하고 싶다.
- 처음 참가한 ACM ICPC 예선에서 무참히 짓밟히고 나서 ...나도 본선에 가보고 싶다.
- 해보니 재밌어서.
공부 방법의 선택
상황에 따라 적절한 방법을 선택해야 함.
1. 프로그래밍 언어가 익숙하지 않다? 일단 쉬운 문제부터 무작정 풀기.
2. 언어는 익숙한데 공부를 시작한 지 얼마 되지 않았다?기초 주제에 관한 문제들 풀기. (DFS, BFS, 다이나믹 프로그래밍 …)
공부 방법의 선택
3. 기초 주제들을 어느 정도 공부했다?
무작정 풀다가 모르는 주제가 있으면 공부하자.
문제 해결의 재미를 느껴가면서 차근차근.
책을 한 번에 다 보려고 하면 안 된다. 필요할 때마다 한 주제씩 정복해나가자. (훑어보기 -> 한 주제 정복 -> 훑어보기 사이클)
같이 공부하기
- 동아리나 스터디 그룹.
- 온라인 저지의 커뮤니티. (BOJ, 알고스팟의 슬랙)
- 접할 수 있는 정보의 양이 다르다.
- 같은 문제를 놓고 토론하며 공부하기.
- 동반자 & 라이벌.
깊게 공부하기
1. 여러 자료로 공부하자.
- 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략 (종만북)
- 프로그래밍 콘테스트 챌린징 (노란 책)
- Competitive Programming 3 by Steven Halim
- Introduction to Algorithms (CLRS)
깊게 공부하기
3. 자신이 직접 코드를 짜서 AC를 받고 넘어가자.
- 해답을 보고 이해했다고 해서 풀 줄 아는 문제가 되는 게 아니다.
- 짜보지 않으면 같은 문제가 나와도 못 풀 확률이 높다.
깊게 공부하기
4. 복사 + 붙여넣기를 하지 말자.
- 비슷한 문제를 풀어서 재사용 가능한 코드가 있다고 해도 다시 짜자.
- 반복 숙달.
- 막힘 없이 코딩할 수 있는 능력.
- 디버깅 능력.
깊게 공부하기
5. 문제의 유형을 세분화해두자. (당연히 풀이도)
예)- DAG에서 최장경로 구하기- 트리에서 최대 독립 집합 구하기- 트리의 지름 구하기- 이분 그래프 판별하기...
효율적으로 문제 풀기
1. 한 문제에 오래 매달리지 말자.
- 시간을 정해놓고, 그 시간을 넘겨도 풀지 못하면 답을 보자.
- 고민하는 과정에서 배우는 것도 있지만,처음에는 일단 많은 풀이와 사실을 아는 게 더 중요하다.
효율적으로 문제 풀기
2. 적정 난이도의 문제 풀기.
- 보자마자 풀 수 있는 문제는 나중에도 그럴 가능성이 높음.
- 어느 정도 생각해야 풀 수 있는 문제.
- 교훈이 있는 문제.
- 난이도가 보이는 문제들을 풀면 좋다. USACO를 추천.
효율적으로 문제 풀기
4. 풀이에 확신이 들 때 코딩을 하자.
- 풀이를 논리적으로 설명할 수 있어야 한다.
- 증명하는 습관.
- 어중간한 상태에서 코딩하면 코딩이 말리는 경우가 많다.
마치며
- 가장 확실한 공부 방법은 거기에 정신과 시간을 많이 쏟는 것.
- 즐기지 못하면 지속하기 힘들다.
- 문제 해결의 좋은 점?걸어 다니면서도 할 수 있다.밥 먹으면서도 할 수 있다.
- 열심히 한 만큼 보상이 있을 것이다.