[C++] 깊이 μš°μ„  탐색(DFS), λ„ˆλΉ„ μš°μ„  탐색(BFS)
Β·
πŸ“ Computer Science/✏ Algorithm
깊이 μš°μ„  탐색(Depth First Search)κ³Ό λ„ˆλΉ„ μš°μ„  탐색(Breadth First Search) 깊이 μš°μ„  탐색은 ν•œ λ°©ν–₯으둜 계속 κ°€λ‹€κ°€ 더 이상 갈 수 μ—†μœΌλ©΄ λΆ€λͺ¨ λ…Έλ“œλ‘œ λŒμ•„μ™€ λ‹€λ₯Έ λ°©ν–₯으둜 νƒμƒ‰ν•œλ‹€. 주둜 Stackμ΄λ‚˜ μž¬κ·€ ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ κ΅¬ν˜„ν•œλ‹€. λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έν•˜κ±°λ‚˜ κ°€μ€‘μΉ˜, 이동 과정에 μ œμ•½μ΄ μžˆμ„ κ²½μš°μ— μ‚¬μš©ν•˜λ©΄ μ’‹λ‹€. 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” μˆœν™˜ μ•Œκ³ λ¦¬μ¦˜μ˜ ν˜•νƒœλ₯Ό κ°–κ³  μžˆλ‹€. BFS보닀 μ’€ 더 κ°„λ‹¨ν•˜λ‚˜ λ‹¨μˆœ 검색 속도 μžμ²΄λŠ” BFS보닀 λŠλ¦¬λ‹€. λ„ˆλΉ„ μš°μ„  탐색은 ν˜„μž¬ λ…Έλ“œμ—μ„œ κ°€μž₯ κ°€κΉŒμš΄ λ…Έλ“œλ₯Ό λ¨Όμ € λ°©λ¬Έν•΄ νƒμƒ‰ν•œλ‹€. 주둜 Queueλ₯Ό μ΄μš©ν•΄ κ΅¬ν˜„ν•œλ‹€. 두 λ…Έλ“œ μ‚¬μ΄μ˜ μ΅œλ‹¨ 경둜 ν˜Ήμ€ μž„μ˜μ˜ 경둜λ₯Ό μ°ΎλŠ” κ²½μš°μ— μ‚¬μš©ν•˜λ©΄ μ’‹λ‹€. κΈ°λ³Έ 원리 https://www.acmicpc.n..
[C++] 동적 κ³„νšλ²•(Dynamic Programming)
Β·
πŸ“ Computer Science/✏ Algorithm
동적 κ³„νšλ²•(Dynamic Programming)λ³΅μž‘ν•œ 문제λ₯Ό κ°„λ‹¨ν•œ μ—¬λŸ¬ 개의 문제둜 λ‚˜λˆ„μ–΄ ν‘ΈλŠ” 방법이닀.λ˜‘κ°™μ€ 연산을 λ°˜λ³΅ν•˜μ§€ μ•Šλ„λ‘ λ§Œλ“€μ–΄ μ£Όκ³  μ‹€ν–‰ μ‹œκ°„μ„ 쀄일 수 μžˆλ‹€.μž‘μ€ λ¬Έμ œλ“€μ„ ν’€μ–΄λ‚˜κ°€λ‹€ 보면 이전에 ꡬ해둔 더 μž‘μ€ λ¬Έμ œλ“€μ΄ ν™œμš©λ˜λŠ” 것을 ν™•μΈν•˜κ²Œ λœλ‹€. 이에 λŒ€ν•œ κ·œμΉ™μ„ μ°Ύμ•˜μ„ λ•Œ 점화식을 λ„μΆœν•΄ λ‚΄μ–΄ 동적 κ³„νšλ²•μ— μ μš©ν•œλ‹€. ν’€μ΄λ²•dp[i]κ°€ μ˜λ―Έν•˜λŠ” λ°”dp[i]λ₯Ό initialize ν•˜λŠ” 방법dp[i]의 점화식dp[i]λ₯Ό μ±„μš°λŠ” μˆœμ„œμ •λ‹΅μ΄ μ˜λ―Έν•˜λŠ” λ°” https://jyeonth.tistory.com/7 Leetcode: Word BreakWord Break I Given a non-empty string s and a dictionary wordDict containing a li..
[C++] 덱(Deque)
Β·
πŸ“ Computer Science/✏ Algorithm
덱(Deque) 큐의 λ³€ν˜•νŒμœΌλ‘œ μ•ž, λ’€ μ–‘μͺ½μ—μ„œ λͺ¨λ‘ μ‚½μž…κ³Ό μ‚­μ œκ°€ κ°€λŠ₯ν•˜λ‹€. 문제 https://www.acmicpc.net/problem/5430 5430번: AC 문제 μ„ μ˜μ΄λŠ” 주말에 ν•  일이 μ—†μ–΄μ„œ μƒˆλ‘œμš΄ μ–Έμ–΄ ACλ₯Ό λ§Œλ“€μ—ˆλ‹€. ACλŠ” μ •μˆ˜ 배열에 연산을 ν•˜κΈ° μœ„ν•΄ λ§Œλ“  언어이닀. 이 μ–Έμ–΄μ—λŠ” 두 가지 ν•¨μˆ˜ R(뒀집기)κ³Ό D(버리기)κ°€ μžˆλ‹€. ν•¨μˆ˜ R은 배열에 μžˆλŠ” 숫자의 μˆœμ„œλ₯Ό λ’€μ§‘λŠ” ν•¨μˆ˜μ΄κ³ , DλŠ” 첫 번째 숫자λ₯Ό λ²„λ¦¬λŠ” ν•¨μˆ˜μ΄λ‹€. 배열이 λΉ„μ–΄μžˆλŠ”λ° Dλ₯Ό μ‚¬μš©ν•œ κ²½μš°μ—λŠ” μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. ν•¨μˆ˜λŠ” μ‘°ν•©ν•΄μ„œ ν•œ λ²ˆμ— μ‚¬μš©ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, "AB"λŠ” Aλ₯Ό μˆ˜ν–‰ν•œ λ‹€μŒμ— λ°”λ‘œ μ΄μ–΄μ„œ Bλ₯Ό μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. www.acmicpc.net #include #include #include usi..
[C++] 큐(Queue), μš°μ„ μˆœμœ„ 큐(Priority Queue)
Β·
πŸ“ Computer Science/✏ Algorithm
큐(Queue) 문제 https://www.acmicpc.net/problem/1966 1966번: ν”„λ¦°ν„° 큐 문제 μ—¬λŸ¬λΆ„λ„ μ•Œλ‹€μ‹œν”Ό μ—¬λŸ¬λΆ„μ˜ ν”„λ¦°ν„° κΈ°κΈ°λŠ” μ—¬λŸ¬λΆ„μ΄ μΈμ‡„ν•˜κ³ μž ν•˜λŠ” λ¬Έμ„œλ₯Ό 인쇄 λͺ…령을 받은 ‘μˆœμ„œλŒ€λ‘œ’, 즉 λ¨Όμ € μš”μ²­λœ 것을 λ¨Όμ € μΈμ‡„ν•œλ‹€. μ—¬λŸ¬ 개의 λ¬Έμ„œκ°€ μŒ“μΈλ‹€λ©΄ Queue 자료�� www.acmicpc.net #include #include #include #include using namespace std; int main() { int t; cin >> t; while (t--) { int n, m; cin >> n >> m; queue q; vector v(n); for (int i = 0; i > v[i]; if (i == m) q.push(m..
[C++] μŠ€νƒ(Stack)
Β·
πŸ“ Computer Science/✏ Algorithm
μŠ€νƒ(Stack) λ¬Έμ œ https://www.acmicpc.net/problem/4949 4949번: κ· ν˜•μž‘νžŒ μ„Έμƒλ¬Έμ œ μ„Έκ³„λŠ” κ· ν˜•μ΄ 잘 μž‘ν˜€μžˆμ–΄μ•Ό ν•œλ‹€. μ–‘κ³Ό 음, λΉ›κ³Ό μ–΄λ‘  그리고 μ™Όμͺ½ κ΄„ν˜Έμ™€ 였λ₯Έμͺ½ κ΄„ν˜Έμ²˜λŸΌ 말이닀. μ •λ―Όμ΄μ˜ μž„λ¬΄λŠ” μ–΄λ–€ λ¬Έμžμ—΄μ΄ μ£Όμ–΄μ‘Œμ„ λ•Œ, κ΄„ν˜Έλ“€μ˜ κ· ν˜•μ΄ 잘 맞좰져 μžˆλŠ”μ§€ νŒλ‹¨ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ§œλŠ” 것이닀. λ¬Έμžμ—΄μ— ν¬ν•¨λ˜λŠ” κ΄„ν˜ΈλŠ” μ†Œκ΄„ν˜Έ("()") 와 λŒ€κ΄„ν˜Έ("[]")둜 2μ’…λ₯˜μ΄κ³ , λ¬Έμžμ—΄μ΄ κ· ν˜•μ„ μ΄λ£¨λŠ” 쑰건은 μ•„λž˜μ™€ κ°™λ‹€. λͺ¨λ“  μ™Όμͺ½ μ†Œκ΄„ν˜Έ("(")λŠ” 였λ₯Έμͺ½ μ†Œκ΄„ν˜Έ(")")μ™€λ§Œ 짝을 이뀄야 ν•œλ‹€. λͺ¨λ“  μ™Όμͺ½ λŒ€κ΄„ν˜Έ("[")λŠ” 였λ₯Έμͺ½ λŒ€κ΄„www.acmicpc.net#include #include #include using namespace std;int main(void){ ..
[C] 이진 탐색 트리(BST)
Β·
πŸ“ Computer Science/✏ Algorithm
이진 탐색 트리(BST) 각각의 λ…Έλ“œκ°€ μ΅œλŒ€ 2개의 μžμ‹ λ…Έλ“œλ₯Ό κ°€μ§€λŠ” 이진 트리의 ꡬ쑰λ₯Ό κ°–μΆ”κ³  μžˆλ‹€. μ—°κ²° 리슀트둜 κ΅¬ν˜„λœλ‹€. κΈ°λ³Έ 원리 λͺ¨λ“  λ…Έλ“œμ˜ 값은 μœ μΌν•˜λ‹€. 루트 λ…Έλ“œλ₯Ό κΈ°μ€€μœΌλ‘œ μ™Όμͺ½μ— μžˆλŠ” 값듀은 루트 λ…Έλ“œμ˜ 값보닀 μž‘λ‹€. 루트 λ…Έλ“œλ₯Ό κΈ°μ€€μœΌλ‘œ 였λ₯Έμͺ½μ— μžˆλŠ” 값듀은 루트 λ…Έλ“œμ˜ 값보닀 크닀. μ™Όμͺ½κ³Ό 였λ₯Έμͺ½ μ„œλΈŒ νŠΈλ¦¬λ„ 이진 탐색 νŠΈλ¦¬μ΄λ‹€. 문제 #include using namespace std; typedef struct node_struct { int data; struct node_struct* left; struct node_struct* right; }node; node* insert_node(node* root, int value) { if (root == NULL) { root..