[Algorithm][μ΅œμ ν™”] λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°(Dynamic Programming)
Β·
Computer Science/Algorithm
λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ΄λ²ˆ ν¬μŠ€νŠΈμ—μ„œλŠ” μ•Œκ³ λ¦¬μ¦˜ 문제 ν’€μ΄μ˜ 핡심 μ „λž΅ 쀑 ν•˜λ‚˜μΈ λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° 에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μ•„λ§ˆ λ§Žμ€ 뢄듀이 ν•œ 번쯀 "DP λ„ˆλ¬΄ μ–΄λ ΅λ‹€", "점화식이 λ­”μ§€ λͺ¨λ₯΄κ² λ‹€" 라고 λŠκ»΄λ³΄μ…¨μ„ κ²λ‹ˆλ‹€. μ € μ—­μ‹œ μ²˜μŒμ—λŠ” 같은 고민을 ν–ˆκ³  κ·Έλƒ₯ μ™Έμš°κΈ°λ³΄λ‹€λŠ” 사고 과정을 μ΄ν•΄ν•˜μžκ³  λ§ˆμŒλ¨ΉμœΌλ©΄μ„œ μ‘°κΈˆμ”© 감을 작게 λμŠ΅λ‹ˆλ‹€. μ–΄λ €μš΄ 만큼, μ΅œμ ν™” 문제λ₯Ό ν‘ΈλŠ” 데 맀우 μœ μš©ν•˜κΈ° λ•Œλ¬Έμ— λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•΄ ν•˜λ‚˜μ”© νŒŒν—€μ³ 보기둜 ν•˜κ² μŠ΅λ‹ˆλ‹€.λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°(DP: Dynamic Programming) μ΄λž€?λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ€ 큰 문제λ₯Ό μž‘μ€ 문제둜 λ‚˜λˆ„κ³  μž‘μ€ 문제의 정닡을 μ €μž₯ν•˜μ—¬ μž¬ν™œμš©ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ κΈ°λ²•μž…λ‹ˆλ‹€.μ‰½κ²Œ λ§ν•˜λ©΄, ν•œλ²ˆ κ³„μ‚°ν•œ λ¬Έμ œλŠ” λ‹€μ‹œ ν’€μ§€ μ•Šκ³  μ €μž₯ν•΄μ„œ μ“°λŠ”..
[Algorithm][탐색] 이뢄 탐색(Binary Search)
Β·
Computer Science/Algorithm
μ΄λΆ„νƒμƒ‰μ΄λ²ˆ ν¬μŠ€νŠΈμ—μ„œλŠ” 효율적인 탐색 기법 쀑 ν•˜λ‚˜μΈ 이뢄 탐색에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.완전탐색보닀 훨씬 λΉ λ₯΄κ²Œ μ›ν•˜λŠ” 값을 찾을 수 있으며 μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œμ—μ„œ 맀우 자주 μ‚¬μš©λ˜λŠ” ν•„μˆ˜ μ „λž΅μž…λ‹ˆλ‹€.이뢄 탐색(Binary Search)μ΄λž€?이뢄 탐색은 μ •λ ¬λœ λ°°μ—΄μ—μ„œ μ›ν•˜λŠ” 값을 λΉ λ₯΄κ²Œ μ°ΎκΈ° μœ„ν•΄ 탐색 λ²”μœ„λ₯Ό μ ˆλ°˜μ”© μ€„μ—¬λ‚˜κ°€λŠ” λ°©μ‹μ˜ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.즉, 쀑간 값을 κΈ°μ€€μœΌλ‘œ μ ˆλ°˜μ”© λ‚ λ¦¬λ©΄μ„œ 탐색 λ²”μœ„λ₯Ό μ’ν˜€λ‚˜κ°€λŠ” λ°©μ‹μž…λ‹ˆλ‹€.μ‹œκ°„λ³΅μž‘λ„λŠ” O(log N)으둜 λΉ λ₯΄κΈ° λ•Œλ¬Έμ— 큰 λ°μ΄ν„°μ—μ„œ μœ μš©ν•˜κ²Œ μ‚¬μš©λ©λ‹ˆλ‹€.λ™μž‘ 원리이뢄 νƒμƒ‰μ˜ 기본적인 흐름은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:배열이 μ˜€λ¦„μ°¨μˆœ(λ˜λŠ” λ‚΄λ¦Όμ°¨μˆœ)으둜 μ •λ ¬λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.μ‹œμž‘ 인덱슀(low)와 끝 인덱슀(high)λ₯Ό μ„€μ •ν•œλ‹€.쀑간 인덱슀(mid)λ₯Ό κ΅¬ν•œλ‹€.mid..
[Algorithm][μ „λž΅] 그리디 μ•Œκ³ λ¦¬μ¦˜(Greedy Algorithm)
Β·
Computer Science/Algorithm
그리디 μ•Œκ³ λ¦¬μ¦˜μ΄λ²ˆ ν¬μŠ€νŠΈμ—μ„œλŠ” 문제 ν•΄κ²° μ „λž΅ 쀑 ν•˜λ‚˜μΈ 그리디 μ•Œκ³ λ¦¬μ¦˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.κ°€μž₯ λ‹¨μˆœν•œ λ°©λ²•μ΄μ§€λ§Œ μ˜μ™Έλ‘œ κ°•λ ₯ν•œ 해법이 될 수 μžˆλŠ” μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€.그리디 μ•Œκ³ λ¦¬μ¦˜(Greedy Algorithm)μ΄λž€?문제λ₯Ό ν•΄κ²°ν•  λ•Œ ν˜„μž¬ μˆœκ°„μ— μ΅œμ„ μ΄λΌκ³  νŒλ‹¨λ˜λŠ” 선택을 λ°˜λ³΅ν•˜μ—¬ μ΅œμ’… 해닡에 λ„λ‹¬ν•˜λŠ” μ „λž΅μž…λ‹ˆλ‹€."μ§€κΈˆ 이 μˆœκ°„ κ°€μž₯ μ΅œμ„ μ˜ 선택을 ν•˜μž" 라고 μ „λž΅μ„ μ„Έμ›Œλ³΄λŠ” κ²λ‹ˆλ‹€.그리디 μ•Œκ³ λ¦¬μ¦˜μ€ 지역적 μ΅œμ ν•΄(Local Optimal Solution)λ₯Ό μ°Ύμ•„λ‚˜κ°€λŠ” 과정을 μ§„ν–‰ν•˜λ©΄μ„œ, μ΅œμ’…μ μœΌλ‘œλŠ” 전역적 μ΅œμ ν•΄(Global Optimal Solution)을 μ°Ύμ•„λ‚˜κ°€λŠ” 방식을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€. 단, 항상 전역적 μ΅œμ ν•΄λ₯Ό 보μž₯ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.적용 쑰건 (μ–Έμ œ μ‚¬μš©ν•  수 μžˆμ„κΉŒ?)그리디 μ•Œκ³ λ¦¬μ¦˜μ΄ ν•­..
[Algorithm][λΉ„νŠΈμ—°μ‚°] λΉ„νŠΈλ§ˆμŠ€ν‚Ή(Bitmasking)
Β·
Computer Science/Algorithm
λΉ„νŠΈλ§ˆμŠ€ν‚Ήμ΄λ²ˆ ν¬μŠ€νŠΈμ—μ„œλŠ” 탐색 μ•Œκ³ λ¦¬μ¦˜κ³Ό 자주 μ“°μ΄λŠ” 기법인 λΉ„νŠΈλ§ˆμŠ€ν‚Ήμ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.λΉ„νŠΈλ§ˆμŠ€ν‚Ή(Bitmasking) μ΄λž€?λΉ„νŠΈλ§ˆμŠ€ν‚Ήμ€ μ •μˆ˜μ˜ 이진 ν‘œν˜„μ„ μ΄μš©ν•΄ μƒνƒœλ₯Ό ν‘œν˜„ν•˜κ±°λ‚˜ μ‘°μž‘ν•˜λŠ” κΈ°λ²•μž…λ‹ˆλ‹€.특히 λ°©λ¬Έ 처리, λΆ€λΆ„ μ§‘ν•© 생성, μ‘°ν•© 문제 λ“±μ—μ„œ 곡간 νš¨μœ¨μ„±κ³Ό μ—°μ‚° 속도λ₯Ό λ†’μ΄λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€.예λ₯Ό λ“€μ–΄, 4개의 μ›μ†Œκ°€ μžˆμ„ λ•Œ 0000λΆ€ν„° 1111κΉŒμ§€μ˜ μ΄μ§„μˆ˜λ₯Ό 톡해 λΆ€λΆ„ 집합을 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.μƒνƒœμ˜λ―Έ0000아무것도 μ„ νƒν•˜μ§€ μ•ŠμŒ10102번, 4번 μ›μ†Œ 선택1111λͺ¨λ‘ 선택 μš°μ„ , λΉ„νŠΈλ§ˆμŠ€ν‚Ήμ— λŒ€ν•΄ μ΄ν•΄ν•˜λ €λ©΄ 2μ§„μˆ˜ κ°œλ…λΆ€ν„° 이해가 ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— λ¨Όμ € μ„€λͺ…λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.2μ§„μˆ˜(Binary)2μ§„μˆ˜λŠ” 2λ₯Ό λ°‘μœΌλ‘œ ν•˜λŠ” 수 μ²΄κ³„μž…λ‹ˆλ‹€.μš°λ¦¬κ°€ μΌμƒμ—μ„œ μ‚¬μš©ν•˜λŠ” μˆ«μžλŠ” 10μ§„μˆ˜(Decima..
[Algorithm][탐색] 완전탐색과 λ°±νŠΈλž˜ν‚Ή(Brute Force & Backtracking)
Β·
Computer Science/Algorithm
완전탐색과 λ°±νŠΈλž˜ν‚Ήμ΄λ²ˆ ν¬μŠ€νŠΈμ—μ„œλŠ” 탐색 μ•Œκ³ λ¦¬μ¦˜ 쀑 κ°€μž₯ 기초적인 완전탐색과 λ°±νŠΈλž˜ν‚Ήμ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.완전탐색(Brute Force) μ΄λž€?κ°€λŠ₯ν•œ λͺ¨λ“  경우의 수λ₯Ό μ „λΆ€ μ‹œλ„ν•΄λ³΄λŠ” νƒμƒ‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.일λͺ…, Brute Force λ˜λŠ” Exhaustive Key Search라고 λΆˆλ¦½λ‹ˆλ‹€.정닡이 λ°˜λ“œμ‹œ μ‘΄μž¬ν•œλ‹€λŠ” 것이 보μž₯된 μƒν™©μ—μ„œ μœ μš©ν•˜λ©° 직관적이고 κ΅¬ν˜„μ΄ κ°„λ‹¨ν•©λ‹ˆλ‹€.ν•˜μ§€λ§Œ, μ‹œκ°„λ³΅μž‘λ„κ°€ 맀우 λ†’μ•„μ§ˆ 수 μžˆμ–΄ μž…λ ₯이 크면 μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆμ‹œ: 3개의 숫자 쀑 2개λ₯Ό μˆœμ„œλŒ€λ‘œ 뽑기#include #include using namespace std;vector arr = {1, 2, 3}; // 탐색할 μˆ«μžλ“€vector visited(3, false); // 숫자 λ°©λ¬Έ μ—¬λΆ€..
[Algorithm][κ·Έλž˜ν”„] 트리 순회(Tree Traversal)
Β·
Computer Science/Algorithm
트리 순회이번 ν¬μŠ€νŠΈμ—μ„œλŠ” κ·Έλž˜ν”„ 탐색 μ•Œκ³ λ¦¬μ¦˜ 쀑 ν•˜λ‚˜μΈ 트리 μˆœνšŒμ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.트리 순회(Tree Traversal)λž€?트리 κ΅¬μ‘°μ—μ„œ λͺ¨λ“  λ…Έλ“œλ₯Ό νŠΉμ •ν•œ μˆœμ„œλ‘œ ν•œ λ²ˆμ”© λ°©λ¬Έν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.νŠΈλ¦¬λŠ” 계측적 μžλ£Œκ΅¬μ‘°μ΄λ―€λ‘œ λ‹¨μˆœνžˆ μ„ ν˜•μ μœΌλ‘œ νƒμƒ‰ν•˜λŠ” 게 μ•„λ‹ˆλΌ λ…Έλ“œ κ°„μ˜ λΆ€λͺ¨-μžμ‹ 관계λ₯Ό κ³ λ €ν•œ 탐색 방식이 ν•„μš”ν•©λ‹ˆλ‹€.μˆœνšŒλŠ” 컴퓨터 ꡬ쑰, 파일 μ‹œμŠ€ν…œ 탐색, μˆ˜μ‹ 트리 평가 λ“± λ‹€μ–‘ν•œ λΆ„μ•Όμ—μ„œ ν™œμš©λ©λ‹ˆλ‹€.순회 λ°©λ²•μœΌλ‘œλŠ” μ „μœ„ 순회, μ€‘μœ„ 순회, ν›„μœ„ μˆœνšŒκ°€ μžˆμŠ΅λ‹ˆλ‹€. ❓ μ™œ μ—¬λŸ¬κ°€μ§€ 순회 방법이 μ‘΄μž¬ν•˜λ‚˜μš”?νŠΈλ¦¬λŠ” λ°©ν–₯μ„±κ³Ό 계측이 μžˆλŠ” ꡬ쑰이기 λ•Œλ¬Έμ— μ–΄λ–€ λ…Έλ“œλ₯Ό λ¨Όμ € λ°©λ¬Έν• μ§€, μžμ‹ λ…Έλ“œλ₯Ό μ–Έμ œ μ²˜λ¦¬ν• μ§€μ— 따라 μ˜λ―Έκ°€ 달라지기 λ•Œλ¬Έμž…λ‹ˆλ‹€.μ „μœ„ 순회(Preorder Traversal)μžμ‹ (λΆ€λͺ¨) ..