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

More Related Content

What's hot

zsh for beginners WCTF 2019 Seminar
zsh for beginners WCTF 2019 Seminarzsh for beginners WCTF 2019 Seminar
zsh for beginners WCTF 2019 Seminarhama7230
 
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기raccoony
 
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기Jong Wook Kim
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr내훈 정
 
"허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기""허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기"Ji Heon Kim
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features SummaryChris Ohk
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리YoungHeon (Roy) Kim
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현NAVER Engineering
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기경원 이
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기Baekjoon Choi
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링TonyCms
 
Baekjoon Online Judge 1019번 풀이
Baekjoon Online Judge 1019번 풀이Baekjoon Online Judge 1019번 풀이
Baekjoon Online Judge 1019번 풀이Baekjoon Choi
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기흥배 최
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 

What's hot (20)

zsh for beginners WCTF 2019 Seminar
zsh for beginners WCTF 2019 Seminarzsh for beginners WCTF 2019 Seminar
zsh for beginners WCTF 2019 Seminar
 
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기
 
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
NDC14 - Rx와 Functional Reactive Programming으로 고성능 서버 만들기
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
 
"허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기""허니몬의 마크다운 사용기"
"허니몬의 마크다운 사용기"
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
1.11 실행계획 해석 predicate
1.11 실행계획 해석 predicate1.11 실행계획 해석 predicate
1.11 실행계획 해석 predicate
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
[네이버오픈소스세미나] Next Generation Spring Security OAuth2.0 - 이명현
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱
 
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
 
언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링
 
Baekjoon Online Judge 1019번 풀이
Baekjoon Online Judge 1019번 풀이Baekjoon Online Judge 1019번 풀이
Baekjoon Online Judge 1019번 풀이
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 

Viewers also liked

두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests
두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests
두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming ContestsStartlink
 
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략Startlink
 
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!Startlink
 
[Tech meet up] 알고리즘? 모르고리즘! - 연세대 모르고리즘 동아리 이도현
[Tech meet up] 알고리즘? 모르고리즘! - 연세대 모르고리즘 동아리 이도현[Tech meet up] 알고리즘? 모르고리즘! - 연세대 모르고리즘 동아리 이도현
[Tech meet up] 알고리즘? 모르고리즘! - 연세대 모르고리즘 동아리 이도현NAVER D2
 
Google Code Jam 2017 소개
Google Code Jam 2017 소개Google Code Jam 2017 소개
Google Code Jam 2017 소개Startlink
 
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...Startlink
 
2016 FunctionCup 풀이
2016 FunctionCup 풀이2016 FunctionCup 풀이
2016 FunctionCup 풀이geunwoo bae
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기Jongwook Choi
 
웨일 보안 이야기
웨일 보안 이야기웨일 보안 이야기
웨일 보안 이야기NAVER D2
 

Viewers also liked (9)

두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests
두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests
두 번째 startlink.live: 장홍준 (hongjun7) - Teamwork in Programming Contests
 
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
 
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
두 번째 startlink.live: 박성원 (ntopia) - PS가 이렇게 해롭습니다. 여러분!
 
[Tech meet up] 알고리즘? 모르고리즘! - 연세대 모르고리즘 동아리 이도현
[Tech meet up] 알고리즘? 모르고리즘! - 연세대 모르고리즘 동아리 이도현[Tech meet up] 알고리즘? 모르고리즘! - 연세대 모르고리즘 동아리 이도현
[Tech meet up] 알고리즘? 모르고리즘! - 연세대 모르고리즘 동아리 이도현
 
Google Code Jam 2017 소개
Google Code Jam 2017 소개Google Code Jam 2017 소개
Google Code Jam 2017 소개
 
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...
두 번째 startlink.live: 최백준 (baekjoon) - 알고리즘 공부하다 창업...
 
2016 FunctionCup 풀이
2016 FunctionCup 풀이2016 FunctionCup 풀이
2016 FunctionCup 풀이
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
웨일 보안 이야기
웨일 보안 이야기웨일 보안 이야기
웨일 보안 이야기
 

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

초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인H4C
 
시스템 보안에 대해 최종본
시스템 보안에 대해   최종본시스템 보안에 대해   최종본
시스템 보안에 대해 최종본승표 홍
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.TonyCms
 
코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdfssuser597fbd
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기Ahreum Kim
 
[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)해강
 
졸업후 취업까지.ssul
졸업후 취업까지.ssul졸업후 취업까지.ssul
졸업후 취업까지.ssul승표 홍
 
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)CONNECT FOUNDATION
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기Changyol BAEK
 
ApprenticeshipPatterns/Chapter5
ApprenticeshipPatterns/Chapter5ApprenticeshipPatterns/Chapter5
ApprenticeshipPatterns/Chapter5Suan Lee
 
(독서광) 프로그래머의 뇌
(독서광) 프로그래머의 뇌(독서광) 프로그래머의 뇌
(독서광) 프로그래머의 뇌Jay Park
 
Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료seungdols
 
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점Wonha Ryu
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님NAVER D2
 
학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기재원 최
 
리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기Heo Seungwook
 
초등학생 소프트웨어 교육 프로젝트 팀 계획안
초등학생 소프트웨어 교육 프로젝트 팀 계획안초등학생 소프트웨어 교육 프로젝트 팀 계획안
초등학생 소프트웨어 교육 프로젝트 팀 계획안Sangsu Song
 
어쩌다로봇
어쩌다로봇어쩌다로봇
어쩌다로봇민건 주
 
성장하는 서버 개발자 되기 - Wanted Livetalk
성장하는 서버 개발자 되기 - Wanted Livetalk성장하는 서버 개발자 되기 - Wanted Livetalk
성장하는 서버 개발자 되기 - Wanted LivetalkKyuhyun Byun
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018devCAT Studio, NEXON
 

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

초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인
 
시스템 보안에 대해 최종본
시스템 보안에 대해   최종본시스템 보안에 대해   최종본
시스템 보안에 대해 최종본
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.
 
코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf코딩테트2205-kucc-220508145530-8015b5d7.pdf
코딩테트2205-kucc-220508145530-8015b5d7.pdf
 
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
 
[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)[Dev rookie] 어디로 가야 하나요(13.10.05)
[Dev rookie] 어디로 가야 하나요(13.10.05)
 
졸업후 취업까지.ssul
졸업후 취업까지.ssul졸업후 취업까지.ssul
졸업후 취업까지.ssul
 
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
 
훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기
 
ApprenticeshipPatterns/Chapter5
ApprenticeshipPatterns/Chapter5ApprenticeshipPatterns/Chapter5
ApprenticeshipPatterns/Chapter5
 
(독서광) 프로그래머의 뇌
(독서광) 프로그래머의 뇌(독서광) 프로그래머의 뇌
(독서광) 프로그래머의 뇌
 
Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료
 
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님
 
학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기
 
리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기
 
초등학생 소프트웨어 교육 프로젝트 팀 계획안
초등학생 소프트웨어 교육 프로젝트 팀 계획안초등학생 소프트웨어 교육 프로젝트 팀 계획안
초등학생 소프트웨어 교육 프로젝트 팀 계획안
 
어쩌다로봇
어쩌다로봇어쩌다로봇
어쩌다로봇
 
성장하는 서버 개발자 되기 - Wanted Livetalk
성장하는 서버 개발자 되기 - Wanted Livetalk성장하는 서버 개발자 되기 - Wanted Livetalk
성장하는 서버 개발자 되기 - Wanted Livetalk
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 

Recently uploaded

인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)snsdl0905
 
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdfSeongwon Kim
 
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한 인천대 챗봇
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한  인천대 챗봇D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한  인천대 챗봇
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한 인천대 챗봇hjk580018
 
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법ultrasuperrok
 
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복Kyubok Cho
 
2024_INU_graduation_presentation_data.pptx
2024_INU_graduation_presentation_data.pptx2024_INU_graduation_presentation_data.pptx
2024_INU_graduation_presentation_data.pptxssuser3a8816
 
2024_Puzners_work_introduction_slide_content
2024_Puzners_work_introduction_slide_content2024_Puzners_work_introduction_slide_content
2024_Puzners_work_introduction_slide_contentalskjde0129
 

Recently uploaded (7)

인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
 
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
 
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한 인천대 챗봇
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한  인천대 챗봇D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한  인천대 챗봇
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한 인천대 챗봇
 
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
 
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
 
2024_INU_graduation_presentation_data.pptx
2024_INU_graduation_presentation_data.pptx2024_INU_graduation_presentation_data.pptx
2024_INU_graduation_presentation_data.pptx
 
2024_Puzners_work_introduction_slide_content
2024_Puzners_work_introduction_slide_content2024_Puzners_work_introduction_slide_content
2024_Puzners_work_introduction_slide_content
 

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

  • 1. 초심자를 위한 알고리즘 공부 전략 오현석 algoshipda@gmail.com
  • 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. 기초 주제들을 어느 정도 공부했다? 무작정 풀다가 모르는 주제가 있으면 공부하자. 문제 해결의 재미를 느껴가면서 차근차근. 책을 한 번에 다 보려고 하면 안 된다. 필요할 때마다 한 주제씩 정복해나가자. (훑어보기 -> 한 주제 정복 -> 훑어보기 사이클)
  • 11. 같이 공부하기 - 동아리나 스터디 그룹. - 온라인 저지의 커뮤니티. (BOJ, 알고스팟의 슬랙) - 접할 수 있는 정보의 양이 다르다. - 같은 문제를 놓고 토론하며 공부하기. - 동반자 & 라이벌.
  • 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에서 최장경로 구하기 - 트리에서 최대 독립 집합 구하기 - 트리의 지름 구하기 - 이분 그래프 판별하기 ...
  • 22. 효율적으로 문제 풀기 1. 한 문제에 오래 매달리지 말자. - 시간을 정해놓고, 그 시간을 넘겨도 풀지 못하면 답을 보자. - 고민하는 과정에서 배우는 것도 있지만, 처음에는 일단 많은 풀이와 사실을 아는 게 더 중요하다.
  • 23. 효율적으로 문제 풀기 2. 적정 난이도의 문제 풀기. - 보자마자 풀 수 있는 문제는 나중에도 그럴 가능성이 높음. - 어느 정도 생각해야 풀 수 있는 문제. - 교훈이 있는 문제. - 난이도가 보이는 문제들을 풀면 좋다. USACO를 추천.
  • 24. 효율적으로 문제 풀기 2. 적정 난이도의 문제 풀기. - 나와 비슷한 실력을 갖춘 사람이 몇 번 틀리고 푼 문제를 풀어보자.
  • 25. 효율적으로 문제 풀기 3. 다른 사람의 코드를 보자. - 다른 풀이 & 좋은 코딩법을 발견할 수 있다. - 코드를 읽고 이해하는 능력을 키울 수 있다.
  • 26. 효율적으로 문제 풀기 4. 풀이에 확신이 들 때 코딩을 하자. - 풀이를 논리적으로 설명할 수 있어야 한다. - 증명하는 습관. - 어중간한 상태에서 코딩하면 코딩이 말리는 경우가 많다.
  • 28. 실전감각 익히기 1. 온라인 대회 참가하기 (탑코더, 코드포스) - 제한시간이 있는 상황에서 연습해봐야 한다. - 레이팅은 생각보다 정확. - 매번 풀이가 올라온다.
  • 29. 실전감각 익히기 2. 시간을 정해놓고 대회문제 돌기 - 시간 배분, 문제 경향 파악.
  • 30. 실전감각 익히기 3. 오프라인 대회 많이 참가하기 - 오프라인 대회는 연습환경과 다르다. - 운영체제, 키보드, 에디터 … - 참고자료가 금지되는 경우도.
  • 32. 마치며 - 가장 확실한 공부 방법은 거기에 정신과 시간을 많이 쏟는 것. - 즐기지 못하면 지속하기 힘들다. - 문제 해결의 좋은 점? 걸어 다니면서도 할 수 있다. 밥 먹으면서도 할 수 있다. - 열심히 한 만큼 보상이 있을 것이다.