[알고리즘] C++로 이해하는 다익스트라(Dijkstra)
·
공부/알고리즘
☑️ C++로 이해하는 다익스트라(Dijkstra)다익스트라 알고리즘은 최단 경로를 구하는 알고리즘이다. 한 정점에서 모든 정점까지의 최단 경로를 구하면서 각 정점까지의 최단 경로를 모두 찾는다. 오래된 알고리즘이라서 이를 개선하거나 영향을 받은 알고리즘도 많은데, 각각 A* 알고리즘, 벨만-포드 알고리즘, 플로이드-워셜 알고리즘 등이 있다. ☑️ 다익스트라 알고리즘 프로세스각 노드의 거리를 무한대로 초기화한다.시작노드의 거리는 0으로 설정한다.이전 노드를 저장할 공간을 Null로 설정한다.방문하지 않은 노드 집합 Q에 모든 노드를 추가한다.노드 집합 Q가 비어있지 않다면 반복한다Q에서 Dist가 가장 작은 노드를 선택한다.Q에서 선택한 노드를 제거한다.선택 노드의 인접 노드를 순회한다.새로운 거리를 확..
[수학] 삼각함수(Sin, Cos, Tan)
·
공부/수학
☑️ 삼각함수(Sin, Cos, Tan)지금까지 수학을 모르고 살던 나에게 수학의 필요성을 일깨워준 것이 삼각함수다. 그래픽스, 렌더링 과정, 그리고 액션 게임을 개발하면서도 삼각함수가 사용된다. 심지어 유니티가 제공하는 함수 중에는 삼각함수의 개념을 내부적으로 포함하고 있는 것들도 있다. 이번 게시글에서는 삼각함수에 대해서 설명한다. ☑️ 삼각비(Trigonometric ratios)먼저 삼각함수를 알기 위해서 삼각비 부터 시작한다. 삼각비는 삼각형의 세 변의 길이 중에서 두 변의 비례 관계를 나타낸 값을 의미한다. 삼각비와 삼각함수는 밀접한 관계를 가진다. 삼각형은 세 개의 변을 가지고 있다. 그렇기 때문에 비례 관계를 총 6개를 만들어 낼 수 있고, 이 중에서 3가지가 싸인, 코싸인, 탄젠트라는 이..
[수학] 게임 개발을 위한 벡터(Vector)
·
공부/수학
☑️ 게임 개발을 위한 벡터(Vector)벡터는 게임 개발에서 많이 사용되는 수학 개념 중 하나다. 오브젝트의 위치, 이동, 물리 등 다양한 분야에서 사용되고 있다. 이 게시글에서는 수학적 의미의 벡터(Vector)에 대해서 설명한다. 글에서는 편의 상 2차원 벡터를 기준으로 설명하지만, 벡터는 N차원까지 확장할 수 있다. ☑️ 벡터란?벡터(Vector)를 수학적인 관점에서 간단하게 설명하면 크기(Magnitude)와 방향(Direction)을 가지고 있는 물리량으로 설명할 수 있다. 내부 원소들은 크기만을 가지는 스칼라(Scalar)로 이루어져 있으며, 이를 표기하는 방식은 아래와 같이 수학 기호 위에 화살표를 긋는다.☑️ 벡터의 사칙 연산벡터의 사칙 연산은 우리가 알고 있는 사칙 연산과 다를 바 없다..
[자료구조] 트리(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도 사용하고 싶을 수 있다...