분류 전체보기(65)
-
우선순위 큐(Priority Queue)
큐 = Queue - 먼저 집어넣은 데이터가 먼저 나오는 선입선출의 자료구조. - 데이터를 아래에서 위로 쌓아올린다고 했을때 나가는 데이터는 맨 아래에 있는 데이터다. - 큐에 데이터를 삽입하는 것을 Enqueue, 맨 앞의 데이터를 삭제하는 것을 Dequeue라고 한다. - 연결 리스트, 벡터, 배열 등으로 구현 가능하며 STL도 존재함. 우선순위 큐 = Priority Queue - 각 데이터에 우선순위를 두어서 우선순위가 가장 높은 데이터가 먼저 나가는 자료구조. - 일반적으로 배열, 연결 리스트, 힙으로 구현하며 보통 삽입, 삭제 모두 O(logN)을 보장하는 힙으로 구현한다. 힙 = Heap - 가장 크거나 작은 값을 찾기 위한 완전 이진 트리(중간에 빈 공간이 없는 트리) - 데이터 삽입: 트..
2022.08.30 -
ios::sync_with_stdio(false)
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 알고리즘을 풀때 실행속도를 빠르게 하기 위하여 작성해주는 코드. 당장 오늘 이 3줄때문에 30분동안 씨름하던 코드가 단박에 정답이라고 나왔다. 도대체 이게 뭐길래 그럴까? ios::sync_with_stdio(false); C++의 iostream과 c의 stdio라는 입출력 stream의 동기화 해제한다는 의미다. 디폴트 상태는 true로 C++과 C의 입출력 스트림이 동기화 되어있어서 C스타일과 C++스타일의 입출력을 혼합사용하여도 사용자의 의도대로 입출력을 받도록 해준다. 해당 구문을 입력하여 동기화를 해제해주면 C++ 입출력 스트림이 독립적인 버퍼를 사용하게 되어 입출력시간을 절약할 수 있다..
2022.08.30 -
다이나믹 프로그래밍
다이나믹 프로그래밍 = DP = Dynamic Programming - 알고리즘의 과정에서 하나의 문제에 대해선 한 번만 풀도록 계획하는 알고리즘. - 재귀함수같은 비효율적인 알고리즘을 개선하기 위한 방법. - 이미 계산한 값을 저장했다가 재활용 한다고 생각하면 편하다. - Top-down 방법과 Bottom-up 방법이 존재. - Top-down 방법: 큰 문제에서 시작하여 작은 문제로 분할하며 푸는 것. - 피보나치를 예로 들면 fb[5] = fb[4] + fb[3]이고 이에 따라서 fb[5]를 구하는 문제는 fb[4]와 fb[3]을 구하는 문제로 분할 가능. - 재귀랑 비슷해 보이지만 계산한 값을 저장하여 이미 계산한 값이 있으면 꺼내쓰는 방법으로 효율성을 증대시킴. - Bottom-up 방법: 작..
2022.08.29 -
Blueprint vs C++
Blueprint - 시각적 프로그래밍 언어 - 변경이 빠르게 반영됨 - 초보자에게 적합하다 - 이미 필요한 기능들이 많이 내장되어있음 - 언리얼을 위한 언어로 제작되었음 - 언어 자체가 쉬워서 협업에 어울릴 수 있음 C++ - 표준 언어 - Blueprint보다 코드가 간결하게 됨 - 표준 언어로써 이미 알고있는 사람들이 많음 - 속도가 매우 빠름 - 언리얼의 모든 영역에 액세스 할 수 있음 - Blueprint에 사용하는 모든 것에도 액세스가 가능함
2022.08.29 -
최소신장트리(MST)
신장트리 = Spanning Tree - 그래프가 존재할때 모든 정점에 대하여 최소한의 연결만 남긴 그래프. - 한 그래프에서 여러가지의 신장트리가 존재할 수 있다. - 모든 정점을 포함해야 하며 모두 연결 되어있어야 함.(버텍스가 N개일때 간선은 N-1개) - 사이클이 존재하면 안된다. - DFS나 BFS로 구할 수 있다. 최소신장트리 = Minimum Spanning Tree - 간선에 가중치가 있는 그래프의 신장 트리에서 간선의 가중치의 합이 최소가 되는 신장 트리. - 주요 방법으론 Prim 알고리즘와 Kruskal 알고리즘이 있음. Kruskal 알고리즘 - 간선을 가중치 기준 오름차순으로 정렬하여 순서대로 판단해나가는 알고리즘. - 간선을 고를 때 사이클이 나오지 않는지 판단해야 함. - 사이..
2022.08.28