[자료구조] 트리(Tree) 완벽 정리 : 개념부터 구현까지
·
공부/자료구조
참고 : GeeksForGeeks(https://www.geeksforgeeks.org/tree-data-structure/)☑️ 트리(Tree) 완벽 정리 : 개념부터 구현까지트리는 알고리즘 문제를 풀기 위해서 반드시 알아야 하는 자료구조 중 하나다. DFS, BFS 등 여러 알고리즘에서 트리가 나타나고 사용된다. 뿐만 아니라, 실제 상업 프로덕트에서도 트리 개념은 중요하게 사용된다. 기본적인 트리의 구조부터 여러가지 트리 개념에 대해서 알아보자. 먼저, 트리는 부모-자식 관계를 가지는 계층적 구조의 자료구조를 의미한다. 이름처럼 트리는 나무가 뿌리에서 시작해서 가지로 뻗어나가는 것처럼, 하나의 루트 노드에서 시작해서 여러 개의 자식 노드로 확장되는 구조를 가진다.트리는 Node와 Edge로 연결되어 ..
[알고리즘] C++로 이해하는 단순 선택 정렬
·
공부/알고리즘
참고 : Do it! 자료구조와 함께 배우는 알고리즘 입문 (파이썬 편)☑️ C++로 이해하는 단순 선택 정렬☑️ 단순 선택 정렬(Selection Sort)이란 무엇일까?간단하게 사용할 수 있는 정렬 중 하나로, 기본 원리는 배열에서 가장 작은 원소를 찾아서 맨 앞으로 이동시키는 과정을 반복시키면서 정렬한다. ☑️ 단순 선택 정렬 의사코드1. 전체 배열의 최솟값을 찾는다.2. 맨 앞 원소와 교환한다.3. 정렬된 부분을 제외한 나머지 부분에서 다시 최솟값을 찾는다.4. 모든 원소가 정렬될 때까지 반복한다. ☑️ 단순 선택 정렬의 시각화 ☑️ 단순 선택 정렬 코드#include #include #include #include #include using namespace std;int main() { ve..
락(Lock)에 대해서 알아보자.
·
공부/CS
jungle-cs-study/2025-04/week05/bh_lock.md at main · Jungle-CS-Study/jungle-cs-studyContribute to Jungle-CS-Study/jungle-cs-study development by creating an account on GitHub.github.com1. 락(Lock)이 왜 필요할까?프로그램에서 프로세스는 단 하나지만, 스레드는 여러개가 존재할 수 있다. 2개의 스레드 A, B가 있다고 가정하고 둘 다 Coins 변수를 공유하고 있다고 생각해보자. 스레드 A와 B가 서로에게 영향을 주지 않고 독립적으로 수행된다면, 훌륭한 일이지만 안타깝게도 스레드 A가 Coins 변수를 사용하고 있을 때, 스레드 B도 사용하고 싶을 수 있다...
[알고리즘] C++로 이해하는 버블 정렬
·
공부/알고리즘
참고 : Do it! 자료구조와 함께 배우는 알고리즘 입문 (파이썬 편)☑️ C++로 이해하는 버블 정렬정렬 알고리즘은 데이터를 다루는 모든 프로그램에서 필수적인 요소로 사용된다. 정렬을 구사할 수 있는 다양한 알고리즘 중에서 버블 알고리즘은 간단한 알고리즘에 속하면서 개념을 이해하기가 쉽고 구현이 직관적이다. 하지만 효율성 문제로 실제 프로젝트에서는 많이 사용되지 않는다. ☑️ 버블 정렬이란 무엇일까?버블 정렬은 인접한 두 원소를 비교하여 필요에 따라 위치를 교환한다. 이 과정을 반복하면 큰 값이 배열의 끝으로 천천히 이동하는데, 이러한 모습이 거품이 수면 위로 떠오르는 것과 비슷해서 버블 정렬이라는 이름을 가진다. 1️⃣ 버블 정렬 의사코드1. 배열의 첫 번째 원소부터 시작해서 인접 원소와 비교한다...
[알고리즘] C++로 이해하는 MST
·
공부/알고리즘
참고 : Introduction to Algorithm참고 : https://www.geeksforgeeks.org/what-is-minimum-spanning-tree-mst/☑️ C++로 이해하는 MST전자 회로는 여러 전자 부품들로 구성되는데, 이 중에서 '핀'이란 이름의 금속 연결부가 있다. 핀들을 서로 연결하여 전기가 흐를 수 있는 경로를 만드는 것이 회로 설계의 기본인데, N개의 핀을 연결하기 위해서는 최소 N-1개의 전선을 사용한다. 전선 연결 문제를 해결하기 위해서 최소 신장 트리(Minimum Spanning Tree)를 사용할 수 있다. 핀은 그래프의 Node에 해당하고 전선은 그래프의 Edge에 해당하기 때문이다. 1️⃣ 신장 트리(Spanning Tree) ?신장 트리는 순환이 존재..
[알고리즘] C++로 이해하는 그리디
·
공부/알고리즘
참고 : https://www.geeksforgeeks.org/greedy-algorithms/☑️ C++로 이해하는 그리디📌 이론과 알고리즘은 다르다.그리디, 부르트포스, 위상정렬 등 다양한 알고리즘 이론들이 존재한다. 이 방법들은 '제안된 이론'을 의미한다. 이론을 어떤 방식으로 구현하냐에 따라서 알고리즘이 갈린다. 예를 들어 '정렬'은 어떠한 기준대로 배치를 바꾸는 것을 의미한다. 정렬이란 이론을 실행하기 위해서 버블 정렬, 힙 정렬, 퀵 정렬 등 다양한 정렬 알고리즘들이 존재한다. ☑️ 그리디 알고리즘(Greedy)프로그래밍 용어는 있는 단어에서 가져온 것들이 많다. 네트워크(Network)는 그물 'Net'와 'Work'의 합성어로 그물처럼 얽혀 연결되어 있는 것을 의미한다. 그리디 알고리즘의..