| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- 타입스크립트
- 문서번호
- Websocket
- font-size
- Props
- 0.75px border
- github
- jwt
- 전역변수
- ZOOM
- npm
- TypeScript
- literal
- 으
- 1px border
- TS
- ES5
- entity
- 컴포넌튼
- es6
- 0.5px border
- Strict
- 당근마켓
- 데이터베이스 #try #이중
- 10px
- 0.25px border
- 클론코딩
- angular
- 서버리스 #
- &연산
Archives
- Today
- Total
복잡한뇌구조마냥
[알고리즘] 알고리즘 설계 기법(Algorithm Design Paradigms) 본문
🧠 알고리즘 설계 기법(Algorithm Design Paradigms) 정리
문제를 해결하기 위한 다양한 전략,
바로 알고리즘 설계 기법이다.
🔍 알고리즘 설계 기법이란?
알고리즘 설계 기법은 복잡한 문제를 구조적으로 해결하기 위한 방법론을 말합니다.
문제 유형에 따라 적절한 전략을 선택하면 효율적인 해결이 가능합니다.
📚 주요 알고리즘 설계 기법
1. 완전 탐색 (Brute Force)
- 가능한 모든 경우를 시도
- 구현은 쉽지만 시간 복잡도가 높음
- ex) 모든 조합, 순열 생성
2. 그리디(Greedy)
- 매 순간 가장 좋아 보이는 선택을 하는 방식
- 국지적 최적이 전역 최적을 보장할 때만 사용 가능
- ex) 거스름돈 문제, 회의실 배정
3. 분할 정복(Divide and Conquer)
- 문제를 쪼개고 해결한 뒤 병합
- 보통 재귀 구조로 구현됨
- ex) 병합 정렬(Merge Sort), 퀵 정렬(Quick Sort)
4. 동적 계획법(DP, Dynamic Programming)
- 중복되는 부분 문제를 메모이제이션으로 최적화
- 점화식 기반, 하향식(top-down) or 상향식(bottom-up)
- ex) 피보나치 수열, 배낭 문제(Knapsack)
5. 백트래킹(Backtracking)
- 모든 가능성을 시도하면서 조건이 맞지 않으면 가지치기
- DFS 기반으로 구현됨
- ex) N-Queen, 스도쿠
6. 탐색 알고리즘 (BFS / DFS)
- 그래프나 트리 구조에서 경로를 찾는 데 사용
- BFS는 최단거리, DFS는 깊이 우선 탐색에 유리
- ex) 미로 찾기, 단지 번호 붙이기
7. 최단 경로 알고리즘
- 그래프에서 두 정점 사이의 최소 거리 계산
- ex)
- 다익스트라: 양의 가중치
- 벨만-포드: 음수 가중치 허용
- 플로이드-워셜: 모든 정점 간 거리
💡 정리 표
| 방법론 | 핵심 아이디어 | 대표 알고리즘 / 문제 예시 |
| 완전 탐색 | 모든 경우 시도 | 순열, 조합 |
| 그리디 | 현재 최선 선택 | 회의실 배정, 최소 동전 개수 |
| 분할 정복 | 쪼개고 합치기 | 퀵 정렬, 병합 정렬 |
| 동적 계획법 | 중복 계산 방지 + 메모이제이션 | 피보나치, 배낭 문제 |
| 백트래킹 | 조건 안 맞으면 되돌리기 | N-Queen, 스도쿠 |
| BFS/DFS | 그래프 탐색 | 미로, 경로 찾기 |
| 최단 경로 | 그래프 최단 거리 | 다익스트라, 플로이드-워셜 |
✨ 마무리
알고리즘 문제를 마주했을 때,
"이건 그리디로 풀 수 있을까? DP가 맞을까?"
이렇게 설계 기법을 기준으로 접근하는 습관을 들이면 문제 해결력이 크게 향상됩니다.
알고리즘은 속도가 아니라 사고의 구조화다.
LIST
'공통 > 알고리즘 및 코테' 카테고리의 다른 글
| [코딩테스트 + Java] 모음사전 - 프로그래머스 Lv.2 (2) | 2025.07.16 |
|---|---|
| [코딩테스트 + Java] 완주하지 못한 선수 - 프로그래머스 Lv.1 (0) | 2025.07.15 |
| [코딩테스트 + Java] 괄호 변환 - 프로그래머스 Lv.2 (3) | 2025.07.08 |
| [코딩테스트 + Java] 문자 반복 출력하기 - 프로그래머스 Lv.0 (0) | 2025.07.07 |
| [코딩테스트 + JAVA] 기능개발 - 프로그래머스 Lv.2 (0) | 2025.07.02 |