1. 해시 테이블
- 키워드:
- "중복 제거", "빠른 탐색", "Key-Value 매핑", "주어진 값을 빠르게 찾기"
- "빈도 계산", "사전(dictionary) 구조", "해시맵", "특정 조건 만족 여부 확인"
- 예시 문제:
- 배열에서 중복되는 숫자 제거.
- 문자열에서 가장 많이 등장한 문자 구하기.
- 두 개의 배열이 같은 원소를 포함하는지 확인.
- 특정 합을 가지는 두 숫자의 인덱스를 찾기 (Two Sum).
- 주어진 문자열의 아나그램을 찾기.
- 주어진 패턴을 만족하는 문자열 매칭.
2. 스택, 큐
- 키워드:
- "후입선출 (LIFO)", "전입선출 (FIFO)"
- "괄호 짝 맞추기", "스케줄 처리", "순서대로 처리", "백트래킹"
- 예시 문제:
- 괄호의 유요성을 탐색
- 히스토리를 관리하는 웹 브라우저의 뒤로 가기/앞으로 가기 구현.
- 큐를 사용한 프로세스 스케줄링 문제.
- 중위 표기법을 후위 표기법으로 변환.
- 큐를 사용해 너비 우선 탐색 (BFS) 구현.
- 스택으로 최대 히스토그램 넓이를 구하기.
3. DFS (깊이 우선 탐색)
- 키워드:
- "그래프", "트리", "모든 경로 탐색", "재귀", "연결된 노드 찾기"
- "한 번 방문 후 되돌아오기", "미로 찾기"
- 예시 문제:
- 그래프에서 연결 요소의 개수 구하기.
- 특정 시작점에서 모든 노드 방문하기.
- 트리에서 모든 루트-리프 경로 찾기.
- 미로의 출구까지 가는 경로 찾기.
- 섬의 개수를 세는 문제.
- 특정 노드가 도달 가능한 노드의 집합 구하기.
4. BFS (너비 우선 탐색)
- 키워드:
- "최단 거리", "층별 탐색", "그래프", "큐 활용"
- "최소 단계", "주변 노드 먼저 탐색", 단 모든 노드 탐색에 사용, 최소 신장 트리는 최소 비용
- 예시 문제:
- 미로에서 출발점에서 도착점까지의 최단 거리 찾기.
- 그래프에서 두 노드 간 최단 경로 구하기.
- 특정 레벨에 존재하는 노드 출력하기.
- 바이러스 퍼짐 문제 (감염된 컴퓨터 찾기).
- 특정 거리 이하로 연결된 노드 집합 구하기.
- 토마토 숙성 문제 (2D 배열 BFS).

5. 플러드 필 (Flood Fill) = DFS를 활용한 재귀적 탐색 방법
- 키워드:
- "이미지 채우기", "영역 탐색", "같은 색 그룹 찾기"
- "2D 배열", "인접 노드 탐색"
- 예시 문제:
- 2D 배열에서 연결된 동일 색상 영역 채우기.( 블록 색상을 채우는 게임에서 같은 색으로 연결된 블록을 선택하면 블록들이 전부 사라지거나 다른 색으로 바뀝니다. )
- 섬의 개수를 세는 문제 (2D 배열).
- 특정 지점으로부터 연결된 영역의 크기 구하기.
- 게임 맵에서 특정 조건을 만족하는 영역 색칠하기.
- 특정 구역에서 물이 퍼지는 경로 찾기.
- 특정 값과 같은 인접한 셀을 모두 변환.
6. 브루트 포스 (완전 탐색)
- 키워드:
- "모든 경우의 수 탐색", "가능한 모든 조합/경우 시도"
- "효율성보다는 정답 보장", "제약 조건 없는 탐색"
- 예시 문제:
- 숫자 배열에서 가능한 모든 부분 집합의 합 구하기.
- n개의 숫자로 만들 수 있는 모든 조합 출력.
- 주어진 단어의 모든 순열 생성.
- 특정 길이의 모든 부분 문자열을 탐색.
- 특정 조건을 만족하는 수열 조합 찾기.
- 특정 위치에서 나이트의 이동 가능성 확인.
7. 그리디 알고리즘
- 키워드:
- "매 순간 최적의 선택", "국소 최적 → 전체 최적"
- "정렬된 데이터", "최소/최대 값 구하기"
- 예시 문제:
- 동전의 최소 개수로 금액 만들기.
- 가장 많은 회의를 배정하는 회의실 문제.
- 배낭 문제 (Greedy Knapsack).
- 문자열을 뒤집지 않고 사전순으로 가장 작은 문자열 만들기.
- 최소한의 구간으로 커버하기.
- 높은 점수를 우선적으로 선택하는 문제.

8. 이분 탐색
- 키워드:
- "정렬된 데이터", "탐색 범위 줄이기", "중간값 비교"
- "정확한 값 찾기", "최소/최대 조건 만족"
- 예시 문제:
- 정렬된 배열에서 특정 값을 찾기.
- 특정 조건을 만족하는 최소/최대 값 찾기 (예: 부피, 시간).
- 특정 목표 값을 만들기 위한 숫자 조합 탐색.
- 제곱근 계산 (수치 해석).
- 배열의 가장 가까운 값을 찾기.
- 정렬된 배열에서 삽입 위치 구하기.
9. 그래프
- 키워드:
- "노드와 간선", "연결된 데이터", "인접 리스트/행렬"
- "경로 찾기", "연결 여부 확인"
- 예시 문제:
- 그래프에서 두 노드 간 경로가 존재하는지 확인.
- 가중치 없는 그래프에서 최단 경로 구하기.
- 특정 그래프가 사이클을 포함하는지 확인.
- 트리의 높이 구하기.
- 그래프가 연결되어 있는지 확인.
- 이분 그래프인지 판별하기.
10. 투 포인터, 슬라이딩 윈도
- 키워드:
- "배열의 구간", "서로 다른 두 포인터", "연속된 부분"
- "특정 조건 만족하는 구간", "최소/최대 길이"
- 예시 문제:
- 배열에서 특정 합을 만족하는 부분 배열 찾기.
- 문자열에서 가장 긴 중복 없는 부분 문자열 찾기.
- 배열의 최대/최소 평균 구간 찾기.
- 정렬된 배열에서 두 합이 특정 값을 만족하는 두 숫자 찾기.
- 특정 조건을 만족하는 최소 구간 길이 찾기.
- K개를 초과하지 않는 서로 다른 문자가 포함된 가장 긴 문자열 찾기.
11. 유니온 파인드 (Union-Find)
- 키워드:
- "집합 찾기", "그래프에서 사이클 확인", "연결 여부"
- "최소 신장 트리", "네트워크 연결 확인"
- 예시 문제:
- 그래프에서 사이클 확인하기.
- 특정 네트워크의 연결 상태 파악하기.
- 최소 신장 트리 생성 (Kruskal 알고리즘).
- 도시 간 연결 여부를 확인하는 문제.
- 특정 노드 그룹이 같은 집합인지 확인.
- 친구 관계를 그룹으로 묶기.
12. 최소 신장 트리 (MST, Kruskal/Prim)
- 키워드:
- "가중치 그래프", "모든 노드 연결", "최소 비용"
- "네트워크 설계", "간선 선택"
- 예시 문제:
- 도시를 연결하는 도로의 최소 비용 계산.
- 특정 지역 네트워크 연결 비용 줄이기.
- 통신망을 최소 비용으로 구축하기.
- 그래프의 모든 노드를 연결하는 최소 간선 찾기.
- 전기 배선을 최적화하는 문제.
- 케이블 설치를 위한 최소 비용 계산.


13. 비트 마스킹
- 키워드:
- "이진수 표현(0, 1로 표현 가능한 경우)", "상태 저장", "조합/부분집합"
- "효율적인 데이터 표현", "AND, OR, XOR"
- 예시 문제:
- n개의 숫자 중 조건을 만족하는 모든 부분집합 구하기.
- 집합의 모든 부분 집합 출력하기.
- 두 집합의 교집합 계산하기.
- 특정 비트가 켜져 있는지 확인하기.
- 비트 상태를 변환해 최소 전환 횟수 계산하기.
- 스위치 상태를 변경해 최적 상태로 만들기.
'Coding Test > 학습 방식' 카테고리의 다른 글
코딩테스트 풀이 공식 (3) | 2024.11.20 |
---|