최근 알고리즘을 공부해야겠다는 생각이 부쩍 들었다. 우선은 무엇을 어떻게 공부해야 하는지 알아야 할 것 같아서 자료를 찾아보았다. 앞으로 아래의 내용을 참고하여 꾸준히 공부해보려고 한다.
알고리즘 문제
코드업: 기초 100제
백준 온라인 저지: 삼성
코드포스 - 블루레벨 정도의 실력까지.
탑코더 알고리즘 튜토리얼: 초심자 추천
프로그래머스: 카카오
알고스팟
코딩도장
Hackerearth
Hackerrank
알고리즘 공부 방법
- 기본 개념/문법 이해하기
- 기본 알고리즘 코드 학습하기
- 백준에서 아래의 문제를 50문제씩 풀어보기
- 그리디 알고리즘 문제
- 탐색 문제(완전 탐색, BFS, DFS)
- 기본 동적 프로그래밍
- 기출문제
고급
- 그래프이론
- 중급 및 고급 동적 프로그래밍
- 문자열
알고리즘 기본 개념
- 시간 복잡도(중요! 계산해보아야 함)
- 자료구조: 선형/비선형
- 정렬
좋은 알고리즘의 조건
- 입력: 외부에서 제공되는 자료가 0개 이상 존재
- 출력: 적어도 2개 이상의 서로 다른 결과를 내야 한다.
- 명확성: 수행과정은 명확하고 모호하지 않은 명령어로 구성된다.
- 유한성: 유한 번의 명령어를 수행한 후 유한 시간 내에 종료한다.
- 효율성: 모든 과정은 명백하게 실행가능(검증 가능)한 것이어야 한다.
책
- 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략(종만북)
- 프로그래밍 콘테스트 챌린징(노란책)
- Competitive Programming 3 by Steven Halim
- Introduction to Algorithms(CLRS)
문제 푸는 방법
- 시간을 정해놓고, 그 시간을 넘겨도 못 풀면 답을 본다. 처음에는 많은 풀이와 사실을 아는 게 더 중요하다.
- 적정 난이도의 문제: USACO 추천
- 다른 사람의 코드를 본다. 좋은 코딩법을 배울 수 있고, 코드를 읽고 이해하는 능력을 키울 수 있다.
- 풀이를 논리적으로 설명할 수 있을 때 코딩을 한다.
기타
- 언어는 C++, Python
- 책을 정독하고 본인의 언어로 개념을 알 때까지 구현한다.
- 내 말로 설명하자: 글이나 말로 설명한다.
- 알고리즘은 내 언어로 추상화해서 기억
- 직접 코드를 짜서 확인해본다. 반복 숙달, 디버깅 능력
- 문제 유형과 풀이를 세분화한다. (예: DAG에서 최장경로 구하기, 트리의 지름 구하기 등)
알고리즘 공부 법 잘 보구 가요