Skip to content

CocoballStudy/Algorithm-Study

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cocoball Study🍪

📙 algorithm-study

코딩테스트를 위한 알고리즘 개념정리, 예제문제 풀이파일 관리하는 레포지토리입니다.

📎알고리즘 : 총 8가지 (한 알고리즘 당 2주) 그리디, 구현, Dfs/bfs, 정렬, 이진탐색, 다이나믹, 최단경로, 그래프이론

날짜 Week 개념 내용
2022.09.17 1주차 그리디 이코테 chap03 (p.85~102) 개념정리, 기본예제 풀이
2022.09.21 2주차 그리디 1931. 회의실 배정(공통문제) + 2문제
2022.09.28 3주차 구현 이코테 chap04 (p.101~119) 개념정리, 기본예제 풀이
21608 상어 초등학교, 12933 오리, 20291 파일 정리

알고리즘 문제 사이트

프로그래머스 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 지식)
    • 이 능력이 부족하면 솔루션을 열었을때 외계어를 마주하게 된다.
  • 정해진 시간내에 문제풀때 문제 이해시간/풀이 생각시간/코딩시간/디버깅시간을 기록하며 어떤 부분이 구체적으로 부족한지 인지해서 부족한 부분에 더 노력을 들이기로

알고리즘 스킬을 늘리기위한 공부 순서

  1. 알고리즘 관련 이론을 공부해 이해한다.
  1. 이론과 관련된 알고리즘 문제를 푼다.
  • ex) 해쉬를 이용하는 문제, 배열을 이용하는 문제
  • 문제의 레벨이나 자신의 눈높이에 맞추어 적당한 시간을 정해놓고 푼다.
  • 난이도에 따라 60분~120분이 적당하다. (2시간 이상 넘기지 않는다)
  • 시간을 점점 단축시키는 방향으로 공부해야 실전에 대비할 수 있다.
  1. 이해하기 어려운 문제는 질문하거나 풀이를 본다.
  • 주어진 문제를 풀다가 어디에서 막혔는지 혹은 자신이 무엇을 모르고 있는지 명확히 알아야 해법이 가능하다.
  • 관련된 이론 참고하기, 정답 소스 보기, 다른 사람들 풀이 보기
  • 이해하기 힘든건 주위 사람들 혹은 깃허브에 issue를 등록하거나 pull request를 날려서 질문하자
  • 쉬운것같은 문제도 괜찮으니 망설이지 말고 질문하자. 지혜를 모으면 더 좋은 솔루션을 발견.
  1. 알고리즘을 이해하고 다시 푼다.
  • 피드백을 적용해서 코드를 수정한다.
  • 상대방에게 받은 피드백과 코드에 자신이 적용한 해결방법을 정리해서 README.md에 작성하고 source/해당 코드가 있는 폴더에 업로드한다.
  • 코드에 주석을 달면 시간이 지나고 다시 볼 때 빠른 이해에 도움이 된다.

* 반드시 지키는것 보단 자신에게 맞는 공부법을 찾아가자

팀원 스터디 진행 방법

온라인 스터디

  1. 월요일마다 팀 공통문제 출제

    • ex) 구현력 문제 + DP 문제
  2. 시간 정해두고 문제풀기

    • 시험 실전대비를 위해 시간을 정해두고 푸는것을 권장 (최대2시간)
  3. 문제풀이 마크다운 작성후 업로드하기. (개인폴더에 작업후 master branch에 merge)

  4. 주말에 온라인 피드백 진행. 약 2시간이 소요됩니다.

  5. 모든 질문은 slack, issue, pull request 등 자유롭게 진행됩니다.

오프라인 스터디

  1. 주 1회 스터디룸이나 카페에서 만나 약 2~3시간 진행한다.
  2. 팀원들에게 자신이 공부한 이론이나 직접 푼 문제를 설명한다.
    • 이때 팀원들의 도움 혹은 피드백이 필요하다면 정리해서 미리 issue 혹은 Pull Request를 날린 후 단톡에 언급
    • 팀원들은 반드시 미팅 전까지 질문 내용과 답변 숙지하기.
  3. 미팅이 끝나고 각자 위의 4번, 알고리즘을 이해하고 다시 푼다 를 진행한다.

폴더 설명

  • contents: 공동폴더. 알고리즘 관련 이론을 정리해서 업로드하는 폴더
  • source: 개인 폴더. 필요한 개인폴더를 생성하고 알고리즘 풀이를 업로드하는 폴더

GitBash 명령어 사용 방법

원격저장소 로컬에 가져오기

git clone https://github.com/TheCopiens/algorithm-study.git

로컬에서 개인 브랜치 생성하기

local workspace에 'ohhako'라는 이름으로 브랜치 생성
git branch ohhako

로컬에서 브랜치 작업후 원격저장소에 반영하기

로컬 브랜치가 있는 폴더에서 개인작업을 마친 후 공동 저장소에 반영한다.

  1. git checkout ohhako - master에서 ohhako 브랜치로 전환
  2. workspace에서 작업
  3. git commit -m "message"
  4. git push origin ohhako - 원격저장소 ohhako 브랜치에 반영
  5. git checkout master - 브랜치 전환
  6. git pull - 원격저장소 master의 최신 정보를 로컬에 업데이트 시키기
  7. git merge ohhako - master에 ohhako 브랜치 작업 반영
  8. git push origin master - 원격저장소 master에 반영

각 알고리즘 문제집

여기에서는 각 알고리즘 개념을 설명하는 것이 없습니다. 알고리즘 설명 링크 모음

문제 뽑은 기준 : 각 태그에 해당하는 문제(코딩 테스트에 나올 정도) 들을 최대한 많이 뽑고 반드시 풀고 넘어가면 좋은 문제를 체크해놨습니다.

❈ 중요❗️❗️ ❈

꼭 전부 풀 필요는 없습니다! 각 주차마다 자신이 풀 수 있는 만큼 풀어오시면 됩니다!

순서는 대략적으로 짜봤습니다. 처음이신 분들은 수학 그리고 문자열부터 푸시면 더 수월하게 알고리즘에 익숙해지실 것 같습니다.

순번 Tag 태그 문제집 추천 문제 수 총 문제 수
00 Math 수학 바로가기 18 29
01 String 문자열 바로가기 19 64
02 Data Structure 자료구조 바로가기 16 25
03 Data Structure 2 자료구조 2 바로가기 11 21
04 Brute Force 완전탐색 바로가기 33 94
05 Implementation 구현 바로가기 30 51
06 Simulation 시뮬레이션 바로가기 30 48
07 Tree 트리 바로가기 15 44
08 Greedy 탐욕법 바로가기 27 62
09 Dynamic Programming 1 동적계획법 1 바로가기 27 80
10 Backtracking 백트래킹 바로가기 28 75
11 Graph Traversal 그래프 탐색 바로가기 31 96
12 Dynamic Programming 2 동적계획법 2 바로가기 28 81
13 Binary Search 이분탐색 바로가기 20 66
14 Divide and conquer 분할정복 바로가기 08 18
15 Shortest Path 최단거리 바로가기 18 53
16 Two Pointer 투 포인터 바로가기 13 36
17 Prefix Sum 누적 합 바로가기 11 32
18 Topological Sorting 위상정렬 바로가기 05 14
19 Disjoint Set 분리 집합 바로가기 06 20
20 Minimum Spanning Tree(MST) 최소 스패닝 트리 바로가기 08 24
21 Trie 트라이 바로가기 05 09
22 Dynamic Programming On Trees 트리디피 바로가기 04 08

이 글은 아래 사이트를 참고해 작성되었습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages