전체 글 1090

[최소 신장 트리 MST(Minimum Spanning Tree)] 최소 비용으로 정점 연결시키기

▶ 신장 트리(Spanning Tree) 그래프 내에 있는 모든 정점이 연결되어 있고 사이클이 없는 그래프 n개의 정점이 있다면 신장 트리의 간선 수는 n-1개가 된다 ▶ 최소 신장 트리 (Minimum Spanning Tree) 각 간선이 가지고 있는 가중치의 합이 최소가 되는 신장 트리 (가중치는 거리, 비용, 시간 등이 될 수 있다) 즉, 최소 신장 트리는 정점과 간선이 주어졌을 때, 최소 비용으로 정점들을 연결시키는 방법을 찾는 것이다. 이런 유형의 문제를 풀기 위해서는 프림 알고리즘(Prim’s Algorithm) 이나 크루스칼 알고리즘(Kruskal’s Algorithm) 을 사용해야한다. 사이클의 존재 유무를 확인할 때는 이전에 배웠던 유니온 find 방법을 이용하면 된다. Ex) A, B,..

[Two Pointer] 탐색구간이 정해져있지 않을 때, 구간 합 구하기

탐색 구간이 정해져있지 않을 때, 빠른 검색을 위해 사용한다. 만약 탐색 구간이 정해져있다면, Sliding Window 알고리즘을 사용하면 된다. 딱 봐서는 Two Pointer처럼 보이지 않지만, sort()를 했을 때 보이는 경우가 있다. 그래서 일단은 정렬 먼저 해보기 - 유투브 영상 더보기 ▷ 개념설명 https://www.youtube.com/watch?v=vfuCLVnlDNs&list=PL1vwZeA5Kax0RXU1Ls5zkFSGKQr02njP2&index=10

[Sliding Window] 탐색구간이 정해져 있을 때, 구간합 구하기

/ ▷ 슬라이딩 윈도우 알고리즘 탐색 구간이 정해져있을 때 빠른 검색을 위해 사용한다 (시간복잡도를 줄이려고) 만약 탐색 구간이 정해져있지 않다면, Two pointer를 쓰면 된다. 예를 들어) 10개의 정수 중 연속된 3개의 구간의 합이 최대일 경우 그 최대값을 구하라는 문제가 있을 수 있다. ex) n개의 정수 중 연속된 m개의 구간의 합이 최대일 경우 그 최대값은? ** 10 5 3 -2 -4 -9 0 3 7 13 8 -3 입력시 출력결과: 31 10 2 3 -2 -4 -9 0 3 7 13 8 -3 입력시 출력결과는: 21 # 슬라이딩 윈도우 n, m = map(int, input().split()) arr = list(map(int, input().split())) sum = 0 # 첫 M개 구..

[Hash] Changing 방식 vs Open Addressing 방식

▷ Hash (해시) Hash 이전에 자료구조의 근간이 되던 것은 DAT이다. DAT(Direct Address Table) -> Hash DAT는 리스트 안에 있는 값을 새로운 리스트의 인덱스로 활용하는 방법이다. 인덱스를 담을 bucket을 만드는 것 그런데 이러한 DAT의 단점은, 마이너스 인덱스를 사용할 수 없다는 것이다 (파이썬은 괜찮지만, 자바나 C에서는 어렵다) 또, 원하는 값이 문자열일 경우 인덱스로 활용할 수가 없다. 이것을 극복해서 만든 것이 바로 Hash이다. 먼저, HASH 함수를 하나 만들고, 여기에 키 값을 하나씩 넣어준다. 그리고 키를 매개변수로 받아주면 된다. 1. Changing 방식 링크드 리스트로 연결시키는 것 리턴에 해당하는 곳에 주렁주렁 달아준다. 2. Open ad..

[Dijkstra (Original ver)]

한 정점에서 모든 정점까지의 최단 거리, 최소 비용을 구하는 알고리즘 다익스트라 알고리즘을 시행하기 위해서는 조건이 2가지 필요하다. 1) 시작점이 주어져야한다 2) 가중치가 전부 양수여야한다. - 유투브 더보기 ▷ 기본 개념설명 https://www.youtube.com/watch?v=ypr7jp4y3IQ&list=PL1vwZeA5Kax0RXU1Ls5zkFSGKQr02njP2&index=4 https://www.youtube.com/watch?v=CqlWtt6oUfI&list=PL1vwZeA5Kax0RXU1Ls5zkFSGKQr02njP2&index=5

[이진탐색(Binary Search)]

원하는 값을 탐색하는 알고리즘 데이터를 미리 정렬해야 사용할 수 있다 O(logN)의 속도 * 주의할 점 이진트리 (Binary Search Tree)와는 완전히 다른 것이다 이진탐색은 검색하는 방법 중 하나일 뿐이고, 이진트리는 데이터를 저장하는 방식 중 하나이다. - 유투브 영상 더보기 ▷ 개념설명 & 기본문제 https://www.youtube.com/watch?v=gI0EJmYKNH8&list=PL1vwZeA5Kax0RXU1Ls5zkFSGKQr02njP2&index=12