공부/CS 공부 7

[자료구조] 분리 집합, Union-Find에 대해서 알아보자!

분리집합(Union-Find)은 그래프 알고리즘 중 하나로 코딩 테스트 킬러 문제로 주로 나오는 알고리즘입니다. 서로소 집합일단 유니온 파인드 알고리즘을 알기 전 disjoint sets을 먼저 이해해야 하는데요, 쉽게 설명하면 공통 원소가 없는 두 집합을 뜻합니다. 아래 그림을 보시면 왼쪽은 서로소 집합을 나타내고 오른쪽은 공통된 7이라는 원소 때문에 서로소 관계가 깨지게 됩니다. 따라서 왼쪽은 서로소 집합, 오른쪽은 서로소 집합이 아니게 되는 것이죠. Union-Find는 서로소 집합 자료구조를 만들 수 있습니다. 집합에서 노드들을 합치고(Union), 부모를 찾아(Find) 서로소 집합을 찾아내는 알고리즘인 것이죠. 한마디로 DSU(Disjoint Sets Union) 자료구조를 만들어 내는 과정..

공부/CS 공부 2023.02.03

[자료구조] 힙 자료구조인 heapq에 대해 알아보자!

힙의 개념힙은 완전 이진트리로 구성된 자료구조이다.우선순위 큐를 위해 만들어진 자료구조이다.힙 자료구조로 우선순위 큐를 구현할 때 삽입 삭제 모두 O(logN) 연산을 가진다.최소 힙: 부모 노드의 값이 자식노드의 값보다 항상 작은 힙최대 힙: 부모 노드의 값이 자식노드의 값보다 항상 큰 힙위 사진과 같이 항상 완전 이진트리로 구성되어 최소 최대 값을 빠르게 찾아낼 수 있도록 설계되어있다. heapq 모듈파이썬에선 heapq 모듈을 이용하여 최소 힙과 최대 힙 모두 구현할 수 있다. heapq 메서드heappush(heap, item)힙 불변성을 유지하면서 item 값을 heap으로 푸쉬한다.heapq.heappop(heap)힙 불변성을 유지하면서, heap에서 가장 작은 항목을 pop 하고 반환해 ..

공부/CS 공부 2023.01.26

[자료구조] 파이썬 자료구조의 꽃 deque에 대해 알아보자!

최근 알고리즘 테스트 공부를 위해서 파이썬을 꽤나 자주 이용하는데, 문제에서 빈번하게 사용되는 deque에 대해서 알아봅시다! Deque, 왜 쓰나요?먼저 주 언어가 Javascript였던 제가, 파이썬으로 알고리즘을 하게 된 가장 큰 이유가 바로 deque의 유무였습니다. 자바스크립트에서 후입선출 방식의 Queue나 양쪽에서 삽입 삭제가 가능한 Double-ended Queue 같은 자료구조를 구현하기 위해선, 링크드리스트를 거의 필수로 사용해야 했습니다. 예를 들어 1, 2, 3이 있는 배열을 큐 방식으로 넣고 뺀다고 생각해 봅시다.1, 2, 3에서 가장 먼저 들어왔던 1의 값만 뺀다고 생각 해봅시다. 그럼 1을 빼기 위해서, 뒤에 있는 모든 index들이 한 칸 앞으로 와야 하는 귀찮은 일이 발생합..

공부/CS 공부 2023.01.17

[알고리즘] DFS와 BFS

알고리즘 공부를 하는 중에 그래프 탐색 파트를 공부하기 시작해서 짚고 넘어가는 것이 좋겠다고 생각하여 DFS와 BFS를 알아보고, 파이썬으로 구현까지 해본다. DFS (Depth-First Search)깊이 우선 탐색이라고 부르고 그래프에서 깊은 부분을 우선 탐색하는 알고리즘이다.갈 수 있는 한 맨 밑까지 탐색하여 리프노드(맨 아래 노드)를 방문하고, 이전 갈림길에서 선택하지 않은 노드들을 방문하는 식으로 탐색한다.방문 위치를 기록 하는 스택을 이용하여 해결 할 수 있다.또는 재귀로 해결 할 수 있다.스택 방식 동작 과정탐색 시작 노드를 스택에 삽입하고 방문 배열에 방문 했다고 표시한다.스택의 최상단 노드에 방문 하지 않은 인접 노드가 있으면 해당 노드를 스택에 넣고 방문 처리를 한다.만약 방문하지 않은..

공부/CS 공부 2023.01.11

[GIT] git branch 전략 git-flow

협업 해야 할 일들이 점점 생겨나면서 Git flow정도는 기본적으로 알아 둬야 차질 없이 개발 할 수있을 거 같은 느낌을 받았다. Git으로 협업 하는 것이 왜 좋은지 Git Flow에 대한 개념이 뭔지 알아보자.git-flow는 Vincent Driessen의 branching model을 적용하여 저장소를 관리 해주도록 하는 확장된 방법론을 의미한다.Branch는 feature - develop - release - hofixes - master로 나누어 코드를 관리하는 전략을 말한다.master (main)사용자에게 배포 되고, 기준이 되는 브랜치를 의미한다. master 브랜치의 HEAD에는 소프트웨어의 최신 배포판의 소스코드 버전이 들어있다. 배포 해도 될 만큼 안정성있는 코드들만 병합 되는 ..

공부/CS 공부 2022.07.04

[알고리즘] C언어 별 찍기 공부하기

for문 구현문제인 별찍기이다. 1-2학기 중간고사 대비를 위해 문제를 풀어보았다. 안이 채워지지 않은 직사각형 구현하기#include int main() { int n; scanf_s("%d", &n); for (int i = 1; i 다이아몬드(마름모) 구현하기#include int main() { int n; scanf_s("%d", &n); for (int i = 0; i i; j--) { printf(" "); } for (int j = 0; j i * 2 + 1; j--) { printf("*"); } printf("\n"); }} 1~n까지 한줄에 출력하기, 숫자가 커지면 커진만큼 숫자 출력#include int main() { int n; scanf_s("%d", &n..

공부/CS 공부 2021.10.08

[알고리즘] 최대 공약수, 최소 공배수 알고리즘 파악하기

유클리드 알고리즘(Euclidean algorithm)은 2개의 자연수의 최대공약수를 구하는 알고리즘입니다. 비교대상의 두 개의 자연수 a와 b에서(단 a>b) a를 b로 나눈 나머지를 r이라고 했을때 GCD(a, b) = GCD(b, r)과 같고 "r이 0이면 그때 b가 최대공약수이다."라는 원리를 활용한 알고리즘입니다.ex) GCD(24,16) -> GCD(16,8) -> GCD(8,0) : 최대공약수 = 8라고 한다..... c언어로 알고리즘을 파악해보자. (C프밍 과제) 먼저 최소 공약수 알고리즘이다.1. 두 수를 입력 받는다.2. 두 수중 큰 수를 x, 작은 수를 y라고 한다.3. y=0이면 최대공약수는 x이며 프로그램을 종료한다.4. r = x % y5. x = y6 y = r7. 다시 3번..

공부/CS 공부 2021.10.08