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