프로그래머스 https://programmers.co.kr/learn/challenges
백준 https://www.acmicpc.net/problem/tags
CodeUp https://codeup.kr/
Codility https://app.codility.com/programmers/
온코더 https://www.oncoder.com/
구름 https://codingtest.goorm.io/
박트리님 PS공부법 https://baactree.tistory.com/52
언어선택 https://www.acmicpc.net/board/view/24568
-
구현력
- 본인이 생각한 알고리즘을 그대로 소스코드로 구현하는 능력
- 프로그램 순서도, 사용할 변수나 함수의 데이터 타입 등을 올바르게 정하는 과정
- 이 스킬을 향상시키려면 어떤 프로그램을 만들고자 하는지를 명확히 해야한다
- 무엇을 입력받아 어디에 저장하고 어떤 과정을 거쳐 중간 결과로 무엇을 얻고 최종적으로 어떤 결과물을 출력하는지 순서도를 적은 후 데이터 타입 또는 자료구조에 저장할지 생각하는 연습을 하자.
-
문제해결능력
- 알고있는 알고리즘, 자료구조, 테크닉을 당면한 문제에 맞게 변형 적용하는 것
- 문제를 창의적인 시각에서 접근해 해결하는 능력이 필요
- 중위권에서 상위권으로 갈 때 발목잡는 스킬
- 이 능력이 부족하면 어떻게 접근해야 할지, 막상 솔루션은 내가 아는 알고리즘,자료구조 인 상황이 연출된다
- 이 스킬을 향상시키려면 양질의 문제를 풀기, 이전에 본인이 접근한 다양한 방법을 잘 정리 해두는 것이 좋다
-
배경지식
- 기초적인 프로그래밍 문법, 알고리즘, 자료구조, 선형대수나 확률 등 기본적인 수학적 지식 (가끔 하드웨어, OS 지식)
- 이 능력이 부족하면 솔루션을 열었을때 외계어를 마주하게 된다.
-
정해진 시간내에 문제풀때 문제 이해시간/풀이 생각시간/코딩시간/디버깅시간을 기록하며 어떤 부분이 구체적으로 부족한지 인지해서 부족한 부분에 더 노력을 들이기로
- 알고리즘 관련 이론을 공부해 이해한다.
- 자신이 이해할 수 있는 방식으로 이론을 정리하자.
- 블로그나 깃허브에 정리하는것도 하나의 방법이 될 수 있다.
- 이론과 관련된 알고리즘 문제를 푼다.
- ex) 해쉬를 이용하는 문제, 배열을 이용하는 문제
- 문제의 레벨이나 자신의 눈높이에 맞추어 적당한 시간을 정해놓고 푼다.
- 난이도에 따라 60분~120분이 적당하다. (2시간 이상 넘기지 않는다)
- 시간을 점점 단축시키는 방향으로 공부해야 실전에 대비할 수 있다.
- 이해하기 어려운 문제는 질문하거나 풀이를 본다.
- 주어진 문제를 풀다가 어디에서 막혔는지 혹은 자신이 무엇을 모르고 있는지 명확히 알아야 해법이 가능하다.
- 관련된 이론 참고하기, 정답 소스 보기, 다른 사람들 풀이 보기
- 이해하기 힘든건 주위 사람들 혹은 깃허브에 issue를 등록하거나 pull request를 날려서 질문하자
- 쉬운것같은 문제도 괜찮으니 망설이지 말고 질문하자. 지혜를 모으면 더 좋은 솔루션을 발견.
- 알고리즘을 이해하고 다시 푼다.
- 피드백을 적용해서 코드를 수정한다.
- 상대방에게 받은 피드백과 코드에 자신이 적용한 해결방법을 정리해서 README.md에 작성하고 source/해당 코드가 있는 폴더에 업로드한다.
- 코드에 주석을 달면 시간이 지나고 다시 볼 때 빠른 이해에 도움이 된다.
* 반드시 지키는것 보단 자신에게 맞는 공부법을 찾아가자
-
월요일마다 팀 공통문제 출제
- ex) 구현력 문제 + DP 문제
-
시간 정해두고 문제풀기
- 시험 실전대비를 위해 시간을 정해두고 푸는것을 권장 (최대2시간)
-
문제풀이 마크다운 작성후 업로드하기. (개인폴더에 작업후 master branch에 merge)
- 문제풀이 양식
- 메세지 컨벤션
- 예시: lee님 백준문제 1149 풀이
- 개인적으로 푼 문제를 업로드해도 좋습니다.
- 팀원들과 공유하는 이론이나 알고리즘 정리를 업로드해도 좋습니다. 예시: ohhako님 DP정리
- 폴더설명 참고
-
주말에 온라인 피드백 진행. 약 2시간이 소요됩니다.
-
모든 질문은 slack, issue, pull request 등 자유롭게 진행됩니다.
- 주 1회 스터디룸이나 카페에서 만나 약 2~3시간 진행한다.
- 팀원들에게 자신이 공부한 이론이나 직접 푼 문제를 설명한다.
- 이때 팀원들의 도움 혹은 피드백이 필요하다면 정리해서 미리 issue 혹은 Pull Request를 날린 후 단톡에 언급
- 팀원들은 반드시 미팅 전까지 질문 내용과 답변 숙지하기.
- 미팅이 끝나고 각자 위의 4번, 알고리즘을 이해하고 다시 푼다 를 진행한다.
- contents: 공동폴더. 알고리즘 관련 이론을 정리해서 업로드하는 폴더
- docs: 공동폴더. 이론 이외의 문서를 업로드하는 폴더
- source: 개인 폴더. 필요한 개인폴더를 생성하고 알고리즘 풀이를 업로드하는 폴더
git clone https://github.com/TheCopiens/algorithm-study.git
local workspace에 'ohhako'라는 이름으로 브랜치 생성
git branch ohhako
로컬 브랜치가 있는 폴더에서 개인작업을 마친 후 공동 저장소에 반영한다.
git checkout ohhako
- master에서 ohhako 브랜치로 전환- workspace에서 작업
git commit -m "message"
git push origin ohhako
- 원격저장소 ohhako 브랜치에 반영git checkout master
- 브랜치 전환git pull
- 원격저장소 master의 최신 정보를 로컬에 업데이트 시키기git merge ohhako
- master에 ohhako 브랜치 작업 반영git push origin master
- 원격저장소 master에 반영