Skip to content

jhkim2-markany/algorithm-study-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

코딩테스트 학습용 알고리즘 자료

프로젝트 소개

코딩테스트에 자주 출제되는 67개 알고리즘 유형별로 이론 설명, 구현 예시, 실전 문제와 해설을 제공하는 학습 자료입니다. 모든 코드는 Golang으로 작성되어 있으며, go run 명령으로 바로 실행할 수 있습니다.

대상 독자

  • 코딩테스트를 준비하는 학습자
  • 알고리즘 기초부터 심화까지 체계적으로 학습하고 싶은 분
  • Golang으로 알고리즘을 구현하고 싶은 분

알고리즘 유형 목록

총 67개 알고리즘 유형을 학습 난이도 순서대로 정리했습니다. 기존 핵심 알고리즘(01~26번), 확장 알고리즘(27~53번), Tier_1 코테 실전 필수(54~59번), Tier_2 코테 상위권 차별화(60~67번)로 구성됩니다.

기존 핵심 알고리즘 (01~26번)

번호 알고리즘 폴더 링크
01 구현과 시뮬레이션 01-implementation-and-simulation
02 브루트포스 02-bruteforce
03 정렬 03-sorting
04 스택과 큐 04-stack-and-queue
05 해시 05-hash
06 누적합 06-prefix-sum
07 수학과 정수론 07-math-and-number-theory
08 이진 탐색 08-binary-search
09 파라메트릭 서치 09-parametric-search
10 투 포인터와 슬라이딩 윈도우 10-two-pointer-and-sliding-window
11 그리디 11-greedy
12 힙과 우선순위 큐 12-heap-and-priority-queue
13 트리 13-tree
14 이진 트리 14-binary-tree
15 그래프 탐색 DFS 15-graph-dfs
16 그래프 탐색 BFS 16-graph-bfs
17 백트래킹 17-backtracking
18 분할 정복 18-divide-and-conquer
19 동적 프로그래밍 19-dynamic-programming
20 유니온 파인드 20-union-find
21 최단 경로 21-shortest-path
22 최소 신장 트리 22-minimum-spanning-tree
23 위상 정렬 23-topological-sort
24 그래프 알고리즘 기타 24-graph-advanced
25 세그먼트 트리 25-segment-tree
26 문자열 알고리즘 26-string-algorithm

확장 알고리즘 (27~53번)

코딩테스트 빈출 및 실력 향상에 필요한 27개 확장 알고리즘입니다. BOJ(백준 온라인 저지) 문제 수 기준으로 우선순위를 분류했습니다.

우선순위 1: 코테 필수 (BOJ 1,000문제 이상)

번호 알고리즘 폴더 링크
27 기하학 27-geometry
28 조합론 28-combinatorics
29 비트마스킹 29-bitmask

우선순위 2: 코테 빈출 (BOJ 300~999문제)

번호 알고리즘 폴더 링크
30 게임 이론 30-game-theory
31 확률론 31-probability
32 비트필드 DP 32-bitmask-dp
33 최대 유량 33-maximum-flow
34 소수 판정 34-primality-test
35 오프라인 쿼리 35-offline-queries
36 분할 정복 거듭제곱 36-exponentiation-by-squaring
37 배낭 문제 37-knapsack
38 DAG 38-dag
39 좌표 압축 39-coordinate-compression

우선순위 3: 실력 향상 (BOJ 150~299문제)

번호 알고리즘 폴더 링크
40 재귀 40-recursion
41 유클리드 호제법 41-euclidean-algorithm
42 볼록 껍질 42-convex-hull
43 이분 매칭 43-bipartite-matching
44 에라토스테네스의 체 44-sieve-of-eratosthenes
45 포함 배제의 원리 45-inclusion-exclusion
46 LCA 46-lca
47 희소 배열 47-sparse-table
48 해싱 48-hashing
49 모듈로 곱셈 역원 49-modular-inverse
50 플로이드-워셜 50-floyd-warshall
51 트라이 51-trie
52 52-deque
53 소인수분해 53-prime-factorization

Tier_1: 코테 실전 필수 (54~59번)

코딩테스트 실전에서 자주 등장하는 필수 유형입니다.

번호 알고리즘 폴더 링크
54 트리 DP 54-tree-dp
55 LIS (최장 증가 부분 수열) 55-lis
56 제곱근 분할법 56-sqrt-decomposition
57 중간에서 만나기 57-meet-in-the-middle
58 0-1 BFS 58-zero-one-bfs
59 플러드 필 59-flood-fill

Tier_2: 코테 상위권 차별화 (60~67번)

상위권 코딩테스트에서 차별화를 위한 고급 알고리즘입니다.

번호 알고리즘 폴더 링크
60 FFT (고속 푸리에 변환) 60-fft
61 삼분 탐색 61-ternary-search
62 오일러 경로 테크닉 62-euler-tour
63 최소 비용 최대 유량 63-mcmf
64 볼록 껍질 트릭 64-convex-hull-trick
65 가우스 소거법 65-gaussian-elimination
66 HLD (Heavy-Light Decomposition) 66-hld
67 센트로이드 분할 67-centroid-decomposition

권장 학습 순서

기존 핵심 알고리즘(01~26번)을 번호 순서대로 학습한 뒤, 확장 알고리즘(27~53번)을 우선순위 순서대로 학습하는 것을 권장합니다.

기초 단계 (01~07)

  • 01 구현과 시뮬레이션 - 문제를 코드로 옮기는 기본기를 다집니다
  • 02 브루트포스 - 모든 경우를 탐색하는 완전 탐색을 익힙니다
  • 03 정렬 - 다양한 정렬 알고리즘과 정렬 활용법을 배웁니다
  • 04 스택과 큐 - 기본 자료구조의 활용법을 익힙니다
  • 05 해시 - 해시 테이블을 활용한 빠른 탐색을 배웁니다
  • 06 누적합 - 구간 합을 효율적으로 계산하는 기법을 익힙니다
  • 07 수학과 정수론 - GCD, 소수 판별 등 수학 기반 알고리즘을 배웁니다

중급 단계 (08~18)

  • 08 이진 탐색 - 정렬된 데이터에서 빠르게 탐색하는 방법을 익힙니다
  • 09 파라메트릭 서치 - 최적화 문제를 결정 문제로 바꾸는 기법을 배웁니다
  • 10 투 포인터와 슬라이딩 윈도우 - 배열/문자열의 구간 처리 기법을 익힙니다
  • 11 그리디 - 탐욕적 선택으로 최적해를 구하는 방법을 배웁니다
  • 12 힙과 우선순위 큐 - 우선순위 기반 자료구조를 활용합니다
  • 13 트리 - 트리 자료구조의 기본 개념과 순회를 배웁니다
  • 14 이진 트리 - 이진 트리의 특성과 활용법을 익힙니다
  • 15 그래프 탐색 DFS - 깊이 우선 탐색을 배웁니다
  • 16 그래프 탐색 BFS - 너비 우선 탐색을 배웁니다
  • 17 백트래킹 - 조건을 만족하는 해를 탐색하는 기법을 익힙니다
  • 18 분할 정복 - 문제를 작은 부분으로 나누어 해결하는 방법을 배웁니다

고급 단계 (19~26)

  • 19 동적 프로그래밍 - 중복 부분 문제를 효율적으로 해결하는 기법을 배웁니다
  • 20 유니온 파인드 - 집합의 합치기와 찾기 연산을 익힙니다
  • 21 최단 경로 - Dijkstra, Bellman-Ford 등 최단 경로 알고리즘을 배웁니다
  • 22 최소 신장 트리 - Kruskal, Prim 알고리즘을 익힙니다
  • 23 위상 정렬 - 방향 그래프의 순서 결정 방법을 배웁니다
  • 24 그래프 알고리즘 기타 - 이분 매칭, 네트워크 플로우 등을 다룹니다
  • 25 세그먼트 트리 - 구간 쿼리를 효율적으로 처리하는 자료구조를 배웁니다
  • 26 문자열 알고리즘 - KMP, 트라이 등 문자열 처리 알고리즘을 익힙니다

확장 단계 - 우선순위 1: 코테 필수 (27~29)

기존 핵심 알고리즘을 모두 학습한 후, 코딩테스트에서 자주 출제되는 필수 알고리즘을 학습합니다.

  • 27 기하학 - CCW, 외적 등 기하학적 연산과 문제 풀이를 배웁니다
  • 28 조합론 - 순열, 조합, 이항 계수 등 조합론적 기법을 익힙니다 (선수: 07)
  • 29 비트마스킹 - 비트 연산을 활용한 집합 표현과 최적화를 배웁니다

확장 단계 - 우선순위 2: 코테 빈출 (30~39)

코딩테스트에 빈번히 출제되는 알고리즘을 학습합니다.

  • 30 게임 이론 - 스프라그-그런디 정리 등 게임 전략을 배웁니다 (선수: 19)
  • 31 확률론 - 확률적 사고와 기댓값 계산을 익힙니다 (선수: 07, 19)
  • 32 비트필드 DP - 비트마스크와 DP를 결합한 상태 압축 기법을 배웁니다 (선수: 19, 29)
  • 33 최대 유량 - 네트워크 플로우와 최대 유량 알고리즘을 익힙니다 (선수: 15, 16, 24)
  • 34 소수 판정 - 밀러-라빈 등 효율적인 소수 판정 알고리즘을 배웁니다 (선수: 07)
  • 35 오프라인 쿼리 - Mo's 알고리즘 등 쿼리 재배치 기법을 익힙니다 (선수: 03, 25)
  • 36 분할 정복 거듭제곱 - 빠른 거듭제곱과 행렬 거듭제곱을 배웁니다 (선수: 18, 07)
  • 37 배낭 문제 - 0/1 배낭, 무한 배낭 등 배낭 문제 변형을 익힙니다 (선수: 19)
  • 38 DAG - 방향 비순환 그래프에서의 DP와 최장 경로를 배웁니다 (선수: 15, 23, 19)
  • 39 좌표 압축 - 큰 좌표 범위를 압축하여 효율적으로 처리하는 기법을 익힙니다 (선수: 03)

확장 단계 - 우선순위 3: 실력 향상 (40~53)

실력을 한 단계 끌어올리기 위한 심화 알고리즘을 학습합니다.

  • 40 재귀 - 재귀적 사고와 다양한 재귀 패턴을 배웁니다 (선수: 18)
  • 41 유클리드 호제법 - 최대공약수와 확장 유클리드 알고리즘을 익힙니다 (선수: 07)
  • 42 볼록 껍질 - 컨벡스 헐 알고리즘과 기하학적 응용을 배웁니다 (선수: 27, 03)
  • 43 이분 매칭 - 이분 그래프에서의 최대 매칭을 익힙니다 (선수: 15, 33)
  • 44 에라토스테네스의 체 - 효율적인 소수 생성과 응용을 배웁니다 (선수: 07)
  • 45 포함 배제의 원리 - 집합의 합집합 크기 계산과 응용을 익힙니다 (선수: 28, 07)
  • 46 LCA - 최소 공통 조상 알고리즘과 트리 쿼리를 배웁니다 (선수: 13, 15)
  • 47 희소 배열 - 구간 최솟값/최댓값 쿼리를 O(1)에 처리하는 기법을 익힙니다 (선수: 06, 25)
  • 48 해싱 - 다항식 해싱, 라빈-카프 등 해싱 기법을 배웁니다 (선수: 05, 26)
  • 49 모듈로 곱셈 역원 - 모듈러 연산에서의 나눗셈 처리를 익힙니다 (선수: 07, 36)
  • 50 플로이드-워셜 - 모든 쌍 최단 경로 알고리즘을 배웁니다 (선수: 21)
  • 51 트라이 - 문자열 검색에 특화된 트리 자료구조를 익힙니다 (선수: 13, 26)
  • 52 덱 - 양방향 큐와 슬라이딩 윈도우 최솟값/최댓값을 배웁니다 (선수: 04)
  • 53 소인수분해 - 효율적인 소인수분해 알고리즘과 응용을 익힙니다 (선수: 07, 34)

Tier_1: 코테 실전 필수 (54~59)

확장 알고리즘을 모두 학습한 후, 코딩테스트 실전에서 자주 등장하는 유형을 학습합니다.

  • 54 트리 DP - 트리 구조에서의 동적 프로그래밍을 배웁니다 (선수: 13, 19)
  • 55 LIS - 최장 증가 부분 수열과 이진 탐색 최적화를 익힙니다 (선수: 08, 19)
  • 56 제곱근 분할법 - 구간 쿼리를 √N 블록으로 처리하는 기법을 배웁니다 (선수: 35, 25)
  • 57 중간에서 만나기 - 탐색 공간을 반으로 나누어 효율적으로 해결하는 기법을 익힙니다 (선수: 02, 03)
  • 58 0-1 BFS - 가중치가 0 또는 1인 그래프에서의 최단 경로를 배웁니다 (선수: 16, 52, 21)
  • 59 플러드 필 - 영역 채우기와 연결 요소 탐색을 익힙니다 (선수: 15, 16)

Tier_2: 코테 상위권 차별화 (60~67)

상위권 코딩테스트에서 차별화를 위한 고급 알고리즘을 학습합니다.

  • 60 FFT - 고속 푸리에 변환을 이용한 다항식 곱셈을 배웁니다 (선수: 07, 18)
  • 61 삼분 탐색 - 유니모달 함수에서의 극값 탐색을 익힙니다 (선수: 08)
  • 62 오일러 경로 테크닉 - 트리를 배열로 펼쳐 구간 쿼리를 처리하는 기법을 배웁니다 (선수: 13, 25, 15)
  • 63 최소 비용 최대 유량 - 비용이 있는 네트워크 플로우를 익힙니다 (선수: 33, 21)
  • 64 볼록 껍질 트릭 - DP 최적화를 위한 기하학적 기법을 배웁니다 (선수: 19, 42)
  • 65 가우스 소거법 - 연립방정식과 행렬 연산을 익힙니다 (선수: 07)
  • 66 HLD - 트리 경로 쿼리를 세그먼트 트리로 처리하는 기법을 배웁니다 (선수: 13, 25, 15)
  • 67 센트로이드 분할 - 트리를 분할하여 경로 쿼리를 효율적으로 처리합니다 (선수: 13, 18)

7일 집중 학습 가이드

HackerRank 코딩테스트 대비 7일 학습 플랜을 별도로 제공합니다.

  • 📋 STUDY_GUIDE.md - 학습 전략, 우선순위 선정 근거, 일별 목표
  • 📁 weekly-prep/ - Day 1~7 일별 학습 계획 및 추천 문제
일차 주제 폴더
Day 1 구현, 브루트포스 day1-implementation-bruteforce
Day 2 그리디, 정렬, DP day2-greedy-sorting-dp
Day 3 BFS, DFS, 해시 day3-bfs-dfs-hash
Day 4 문자열, 백트래킹, 누적합 day4-string-backtracking-prefixsum
Day 5 이진탐색, 스택, 투포인터 day5-binarysearch-stack-twopointer
Day 6 힙, 기출 유형 day6-heap-possible
Day 7 복습, 모의고사 day7-review-mock

각 폴더 구성

모든 알고리즘 폴더는 동일한 구조를 따릅니다.

XX-algorithm-name/
├── README.md          # 폴더 안내
├── theory.md          # 이론 및 개념 설명
├── examples/          # 기본 구현 예시 코드 (.go)
└── problems/          # 연습 문제 및 풀이
    ├── 01-easy-*/     # 쉬운 난이도 문제
    ├── 02-medium-*/   # 보통 난이도 문제
    └── 03-hard-*/     # 어려운 난이도 문제

각 문제 폴더에는 다음 파일이 포함됩니다.

  • problem.md - 문제 설명, 입출력 형식, 예제, 제약 조건
  • solution.go - Golang 풀이 코드
  • explanation.md - 풀이 해설 (접근 방식, 핵심 아이디어, 복잡도 분석)

프로젝트 검증

프로젝트의 구조적 정확성을 자동으로 검증할 수 있습니다.

# 셸 스크립트로 67개 폴더 전체 구조 검증
bash validate.sh

# Go 속성 기반 테스트로 정확성 속성 검증
cd validate && go test ./... -v -count=1

검증 항목:

  • 67개 폴더 존재 및 필수 파일 포함 여부
  • 폴더 명명 규칙 (두 자리 번호 + 케밥 케이스)
  • 이론 문서 필수 섹션 (개념, 동작 원리, 복잡도, 적합한 문제 유형)
  • 문제/해설 문서 필수 섹션
  • 난이도 분포 균형 (easy, medium, hard)
  • Go 코드 규칙 (package main, func main(), 한국어 주석, 표준 라이브러리)
  • 확장 알고리즘 선수 학습 참조
  • 이론 문서 상세 보충 완전성 (단계별 추적, 실전 팁, 관련 알고리즘 비교)

Golang 개발 환경 설정

Go 설치

  1. Go 공식 사이트에서 운영체제에 맞는 설치 파일을 다운로드합니다
  2. 설치 후 터미널에서 버전을 확인합니다
go version

코드 실행 방법

예시 코드 실행:

go run 01-implementation-and-simulation/examples/simulation.go

풀이 코드 실행 (표준 입력으로 데이터 전달):

go run 01-implementation-and-simulation/problems/01-easy-matrix-rotation/solution.go < input.txt

또는 직접 입력:

go run 01-implementation-and-simulation/problems/01-easy-matrix-rotation/solution.go

권장 Go 버전

  • Go 1.21 이상을 권장합니다
  • 모든 코드는 표준 라이브러리만 사용하므로 별도의 의존성 설치가 필요 없습니다

향후 계획

67개 알고리즘 유형이 모두 완성된 상태이며, 추가 확장을 계획하고 있습니다. 자세한 내용은 아래 문서를 참고하세요.

  • TODO_NEW.md - Tier 1/2 이후 추가 알고리즘 후보
  • todo.md - 장기 확장 알고리즘 목록 (BOJ 분류 기준)

About

코딩테스트 대비 알고리즘 유형별 이론·구현·문제·해설 (Golang)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors