본문 바로가기

5

[Java] 자료구조 - 힙 [Java] 자료구조 - 힙 힙은 최소힙이 있고, 최대힙이 있다 최소힙은 부모 노드가 항상 자식 노드보다 작은 숫자가 들어간다 즉 최소힙에서는 제일 앞에 있는 숫자, 또는 루트 노드가 제일 작은 숫자로 이루어져 있다 최대힙은 부모 노드가 항상 자식 노드보다 크기가 크다 즉 최대힙에서는 제일 앞에 있는 숫자, 또는 루트 노드가 제일 큰 숫자로 이루어져 있다 힙은 이진 트리로 만들어져 있다 n의 자식 노드를 구할 때에는 (인덱스가 0으로 시작할 때) / 인덱스가 1로 시작할 때에는 왼쪽 노드는 2n + 1 | 2n 오른쪽 노드는 2n + 2 | 2n + 1 부모 노드를 구할 때에는 (인덱스가 0으로 시작할 때) / 인덱스가 1로 시작할 때 (n - 1) / 2 | n / 2 값을 추가하기 (MaxHeap) .. 2023. 6. 18.
Udemy - Javascript - Binary Heaps Udemy - Javascript - Binary Heaps Udemy JavaScript 이진 힙 MaxBinaryHeap : 부모 노드가 항상 자식 노드보다 크다 MinBinaryHeap : 부모 노드가 항상 자식 노드보다 작다 이진 힙은 항상 오른쪽과 왼쪽의 자식 노드를 채운다 MaxBinaryHeap 에서는 루트 노드가 제일 커야 한다 각 노드는 최대 2개의 자식을 가지고 있다 같은 층에 있는, 자식들은 부모 노드보다 작거나 큰거지, 서로의 관계는 상관이 없 인덱스 0의 자식은 1, 2 인덱스 1의 자식은 3과 4 인덱스 2의 자식은 5와 6 인덱스 3의 자식은 7, 8 즉 인덱스 n의 자식 노드를 구할 때에는 왼쪽 노드는 2n + 1 오른쪽 노드는 2n + 2 반대로 부모 노드를 구할 때에는 (.. 2023. 2. 22.
[Python] 백준 2109 순회강연 🧑‍💻 [Python] 백준 2109 순회강연 Gold 3 - 힙 강연을 하는데, 각 강연마다 강연료와 몇 일 안에 강연을 하는지 입력을 받는다 최대한 강연료를 많이 받을 수 있도록 코드를 짜야 한다 문제풀이 1 힙 리스트 안에, 강연료 기준으로 최대 힙으로 넣는다 즉 튜플 형태로 힘 리스트에 넣는 것 그리고 힙을 하나씩 빼면서, 강연을 해야하는 날이, False이면 True로 바꾼다 강연을 해야 하는 날이, True일 경우, 그 전날을 본다. 이것을 False를 찾을 때 까지 뒤로 탐색을 한다 만약 1일차까지 다 True일 경우는, 그 강연은 못 하는 것이다 문제풀이 2 일단 강의 날짜 기준으로 오름차순으로 정렬을 한다 그리고 강연료를 힙 안에 넣어준다 힙의 길이는 날짜와 같거나, 적어야 한다 넣었는데.. 2023. 1. 20.
[Python] 백준 1715 - 카드 정렬하기 🧑‍💻 [Python] 백준 1715 - 카드 정렬하기 Gold 4 - 그리디, 힙 heappop을 2번씩 해서, 나온 숫자들을 더해준다 더해준 숫자들을 다시 heap에 넣어준다 이것을 heap에 숫자가 2개 미만일 때까지 반복해서 해준다 문제풀이 힙에서 2개의 숫자를 pop으로 뽑아와서, 더해주는 것이다 제일 낮은 숫자끼리 더하면, 최소 숫자를 만들 수 있다 코드 import heapq N = int(input()) heap = [] for n in range(N): heapq.heappush(heap, int(input())) answer = 0 while True: if len(heap) 2023. 1. 18.
🧑‍💻 [Python] 백준 14235 - 크리스마스 선물 🧑‍💻 [Python] 백준 14235 - 크리스마스 선물 Silver 3 - Heap 입력된 값을 순회한다 입력된 값이 0이 아니면 선물을 충전하는 거점 0은 아이들의 집이다 문제풀이 입력 값들을 튜플로 받아서 리스트에 넣는다 그리고 for문을 순회하며 0인지 아닌지 구별한다 0이 아니면 선물을 충전하는 거점 즉 heap에 최대힙으로 선물에 대한 숫자를 넣는다 0이면, heap에 선물이 들어 있는지 없는지를 구별한다 heap에 숫자가 있으면, 제일 앞에 있는 숫자, 즉 제일 큰 숫자를 출력한다 없으면 해당 아이에게 줄 선물이 없다는 것. 즉 -1을 출력한다 코드 import heapq N = int(input()) stops = [] for _ in range(N): stops.append(tuple(.. 2023. 1. 16.