성공적으로 알고리즘을 공부하는 방법
Session
- 알고리즘 사이트 모음
- 알고리즘 추천 책
- 알고리즘 공부법
- 알고리즘 프로그래밍 언어
알고리즘 사이트 모음
- 프로그래머스: https://programmers.co.kr/learn/challenges
- HackerRank: https://www.hackerrank.com/
- LeetCode: https://leetcode.com/
- 코드그라운드: https://www.codeground.org/about
- 사이냅: http://euler.synap.co.kr/
- Topcoder: https://www.topcoder.com/
- 알고스팟: https://algospot.com/judge/problem/list/
- Baekjoon 알고리즘: https://www.acmicpc.net/
- SW Expert Academy: https://www.swexpertacademy.com/main/main.do
- geeksforgeeks: https://www.geeksforgeeks.org/
- CodeForces: http://codeforces.com
- 더블릿: http://59.23.150.58/
- HackerEarth: https://www.hackerearth.com/
알고리즘 추천 책
- 코딩 인터뷰 완전 분석
- 코딩 인터뷰 완전 분석 - 189가지 프로그래밍 문제와 해법 프로그래밍
(게일 라크만 맥도웰 지음 이창현 옮김 인사이트)
- 코딩 인터뷰 완전 분석 - 189가지 프로그래밍 문제와 해법 프로그래밍
- 알고리즘 문제 해결 전략
- 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략 세트 [ 전2권 ]
(구종만 지음 인사이트)
- 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략 세트 [ 전2권 ]
알고리즘 공부법
- 먼저 알고리즘과 관련된 이론*(아래 참고) 을 공부하여 이해한다.
- 이론과 관련된 알고리즘 문제를 푸는 방법을 이해한다.
- 완벽하지 않아도 일부만 이해하는 것으로 충분하다!
- 다음으로 관련된 알고리즘 문제를 풀어본다.
- 한 문제는 길어야 2시간 정도만 고민해본다.
- 2시간 정도 고민해도 모르겠으면 포기하자!
- 정답 소스를 보거나 다른 사람의 풀이를 본다.
- 1, 2번에서 이해가 잘 가지 않는 부분이 있으면 질문한다.
- 설마 이런 것을 질문해도 될까 고민되는 것도 질문해야 한다.
- 친구들이나 관련 커뮤니티를 적극 활용하자!
- 1, 2, 3번 후에 알고리즘을 다시 이해해보고 문제도 다시 풀어본다.
- 모르겠으면 포기하고 다시 풀이를 본다.
- 그래도 모르겠으면, 다른 일을 하거나, 놀러 나가거나, 다른 알고리즘 이론에 대해 공부하거나 다른 알고리즘 문제를 풀어본다.
- TIP
- 충분히 고민해보고 최대한 노력해보고 나서 포기하는 것이 중요하다.
- 충분히 고민하고 노력하는 시간은 한 문제에 1~2시간이 적절하다.
- 스스로 생각해서 해결하지 않고 답을 보고 해결했어도 그 문제는 해결했다고 생각하자.
- 1개를 3일에 걸쳐서 푸는 것보다 3개를 1일 동안 푸는 것이 더 좋다.
- 사용할 수 있는 관련된 라이브러리를 익혀서 사용하자.
- 미적분 문제를 풀기 위해서 굳이 미적분을 스스로 생각해서 만들 필요가 없이 공식을 이용하는 것과 같은 개념이다.
- 충분히 고민해보고 최대한 노력해보고 나서 포기하는 것이 중요하다.
- 가장 중요한 것!!
- 프로그래밍을 많이 하는 것도 중요하지만 더 중요한 것은 생각을 많이 하는 것이다.
알고리즘 공부는 알고리즘을 만드는 것이 아니고, 생각의 과정을 배워서 나중에 스스로 그러한 생각을 해내는 것이기 때문이다. - 또한 자신의 풀이에 대한 회고 와 더 좋은 풀이 방법을 찾는 것이 매우 중요하다.
- 프로그래밍을 많이 하는 것도 중요하지만 더 중요한 것은 생각을 많이 하는 것이다.
‘나’의 알고리즘 스터디 방법
- 모임 일정
- 일주일 2번 혹은 그 이상
- 스크럼 회의(10분의 회의) 진행
- 자신의 공부 진도와 한 일 및 다음 계획에 대한 공유를 10분 안에 진행
- 일주일 1번 모임
- 직접 만나서 서로의 풀이에 대한 피드백 후 좋은 풀이에 대한 분석 진행
- 모여서 할 일은 아래를 참고하자.
- 일주일 2번 혹은 그 이상
- 모임 규칙
- 개인
- 이론 정리
- 각자가 정한 범위의 알고리즘 이론에 대한 내용을 간단히 정리한다.
- EX) 개발 블로그 이용, 간단히 메모하는 정도 등 각자의 방식에 따라
- 각자가 정한 범위의 알고리즘 이론에 대한 내용을 간단히 정리한다.
- 문제 풀이
- 알고리즘 사이트 하나(위의 알고리즘 사이트 모음 참고)를 정한다.
- 각자가 해당 범위의 알고리즘과 관련된 동일한 알고리즘 문제를 푼다.
- 각자가 푼 문제에 대한 자신의 코드를 공유한다.
- EX) github를 이용
- 회고
- 상대방의 코드에 대한 피드백을 적는다.
- 상대방의 코드에 대한 피드백(주석)을 달아 github에 올린다.
- 자신의 코드에 대한 피드백을 확인하고 해당 문제에 대한 좋은 예제를 찾아 분석한다.
- 자신의 코드를 수정하여 다시 gitHub에 올린다.
- 상대방의 코드에 대한 피드백을 적는다.
- 이론 정리
- 스터디 모임
- 이론 정리 피드백
- 자신이 정리한 내용을 간단하게 공유한다.
- 문제 풀이 피드백
- 왜 그렇게 피드백을 주었는지, 그 피드백을 어떻게 수정해서 반영했는지를 공유한다.
- 좋은 코드에 대한 분석을 공유
- 해당 문제를 푸는 좋은 방법에 대해 공유한다.
- 이론 정리 피드백
- ‘나’의 알고리즘 스터디에서의 GitHub 협업은 Feature Branch Workflow 방법을 이용한다.
알고리즘 프로그래밍 언어
- 프로그래밍 언어는 크게 상관 없다.
- 사람들이 알고리즘 문제를 풀 때 주로 많이 사용하는 언어: C++ > C > Java
- C++
- C++11, STL, scanf/printf를 사용하는 것이 좋다.
- C
- C++을 사용하는 것을 더 추천한다.
- Java
- Scanner를 이용하여 입력을 편리하게 받는 것이 좋다.
알고리즘 이론 정리
다음의 기술 면접 예상 질문 대비하기 - 알고리즘(Algorithm)편 POST를 참고하면 좋다.