일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 2557
- 표준 입출력
- 매크로
- 이분그래프
- vscode
- string 함수
- UI한글변경
- k-eta
- EOF
- string 메소드
- double ended queue
- 알고리즘 공부방법
- correlation coefficient
- 프레임워크와 라이브러리의 차이
- 연결요소
- 장고란
- c++
- 백준
- Django란
- 입출력 패턴
- 입/출력
- Django의 편의성
- 구조체와 클래스의 공통점 및 차이점
- 엑셀
- 시간복잡도
- scanf
- Django Nodejs 차이점
- getline
- iOS14
- 자료구조
- Today
- Total
Storage Gonie
챕터0. 알고리즘, 자료구조 공부 방법 본문
알고리즘, 자료구조 공부 가이드
# 알고리즘, 자료구조를 공부해야하는 이유
- 카카오, 라인, 구글, 스타트업 등 개발자가 성장할 수 있는 기업의 입사 관문이다.
- 컴퓨터 과학 또는 컴퓨터 공학 전공자라면 기본 소양으로 여겨지는 부분이다.
# 알고리즘 공부에 효과적인 방법
- 개념을 익히고 바로 문제를 풀어보는 것이 가장 효과적임.
# 이를 위한 기본 커리큘럼
1. 2달 간 코드플러스 사이트에서 기초, 중급1, 중급2 강의를 수강한다.
- 어떤 알고리즘과 자료구조가 존재하는지 익히고, 어떤 식으로 문제를 풀어나가는지에 대한 감을 얻는다.
2. 2달 간 알고리즘 문제해결전략 교재를 구매하여 읽는다.(2권부터 시작해서 1권까지)
- https://book.algospot.com/
3. 알고스팟 문제를 모두 푼다.
4. 프로그래밍 콘테스트 챌린징 교재를 구매하여 읽는다.
- https://book.naver.com/bookdb/book_detail.nhn?bid=6750543
# 세부적인 공부방법
1. 먼저 알고리즘이나 문제를 푸는 방법을 이해
- 완벽하게 이해할 필요는 없고, 어떻게 풀면 될지 감만 살짝 잡을 수 있으면 됨.
2. 관련 문제를 풀어본다.
- 한 문제를 2시간 정도 까지만 고민해보고, 모르겠으면 포기하고 풀이를 본다.
- 끝까지 붙잡고 스스로 해결하려고 하기 보다는 그 시간에 더 많은 문제를 풀어보는 것이 실력향상에 도움이 되기 때문이다.
3. 관련 문제를 풀어 봤음에도 불구하고, 알고리즘이나 문제를 푸는 방법이 이해되지 않으면 질문한다.
- 설마 이런 것을 질문해도 될까 고민 되는 것도 질문해야 한다.
4. 알고리즘을 이해한 뒤 다시 문제를 풀어폰다.
- 그래도 모르겠으면, 다른 일을 하거나 놀러 나가거나 다른 알고리즘 문제를 풀어봤다가 다시 보는게 좋다.
# 문제를 해결할 때 중요한 점
- 코드를 작성하는 것에 시간을 많이 쓰는것도 중요하지만
- 가장 중요한 것은 코드를 작성하기 전, 생각을 많이 하는 것이다.
# 문제 해결시 사용하는 언어
- C++ > C > Java 순으로 많이 사용된다.
문제해결에서 C++이 가장 많이 사용되므로 C++로 시작하길 추천한다. (풀이 참고가 용이함)
- 추천순 : C++ > Java > Python > C
@ C++을 사용하는 경우 Tip
- C++11 이상, STL(표준 템플릿 라이브러리)을 사용하는 것이 좋다.
STL을 사용하는 이유는 문제해결시 자료구조를 직접 구현하는 것은 주요 평가요소가 아니라
자료구조를 이용해 얼마나 효율적으로 문제를 해결해 내느냐가 중요하기 때문이다.
- cin, cout을 사용하기 전에 ios_base::sync_with_stdio(false); 한 줄을 써준뒤 사용하게 되면,
scanf/printf에 맞먹는 속도를 가질 수 있다.)
- scanf/printf 를 사용하면 입출력의 속도가빠르다.
# 언어별 주요 입출력 함수
- C : scanf, printf 등
- C++ : cin, cout, scanf, printf 등
- Java : System.out.println, Scanner 등
- Python : input, print 등
기타 도움되는 정보
# 두 가지 종류의 알고리즘 문제 사이트
@ 온라인저지, 문제를 얼마나 풀었냐에 따라 랭킹이 정해짐.
- 백준 사이트 : https://www.acmicpc.net/
- 알고스팟 : https://algospot.com/
@ 정기적인 대회가 열리기도 함, Rating이란 제도가 있어서 얼마나 어려운 문제를 잘 푸는가를 가지고 순위를 정함.
- Codeforces : https://codeforces.com/
- Topcoder : https://www.topcoder.com/
# 알고리즘을 제대로 배워야 하는 이유
- http://book.algospot.com/hard.html '알고리즘 문제 해결 전략' 책의 서문에 잘 나와있음
- "경험과 깨달음을 얻기 위한 좋은 통로가 바로 프로그래밍 대회입니다."
- "잘 알려진 알고리즘들을 베껴 쓰기만 하면 해결할 수 있는 문제만 있는 것이 아니라 알고리즘에 사용된 원칙들을 이해하고 변형해야 풀 수 있는 문제들이 많이 출제되기 때문에 이런 주제들을 깊이 이해하는 데 큰 도움이 됩니다."
- "이 책은 프로그래밍 대회 문제를 풀며 각종 알고리즘 설계 기법과 자료 구조를 직관적으로 이해하고, 나아가 알고리즘 문제 해결 능력을 키울 수 있도록 구성했습니다. 이를 위해 각 기법이 생겨난 배경과 이유, 그리고 기법을 만들기 위해 필요한 과적을 자세히 다루었습니다. 연습 문제는 실제 프로그래밍 대회 문제로 구성되어 있으며, 해당 장에서 배운 기법을 직접적으로 적용하거나 변형해 보면서 이들에 대한 직관을 얻을 수 있도록 설계했습니다. 여러 문제를 풀어 가는 과정에서 다양한 개념과 구조들을 경험적으로 이해할 수 있도록 하는 것이 위 책의 목표입니다."
'알고리즘 > 알고리즘 기초(코드플러스)' 카테고리의 다른 글
챕터3-1. DP | 기초 (0) | 2019.04.27 |
---|---|
챕터2-4. 자료구조 | 문자열 (0) | 2019.04.23 |
챕터2-3. 자료구조 | 덱(Deque) (0) | 2019.04.23 |
챕터2-2. 자료구조 | 큐(Queue) (0) | 2019.04.23 |
챕터2-1. 자료구조 | 스택(Stack) (0) | 2019.04.23 |