Algorithm/Study

[99클럽 코테 스터디] 📝 Day6. 꾸준함2

ioh'sDeveloper 2024. 5. 26. 21:59
99클럽 코테 스터디 6일차 TIL + 힙(Heap)

 

📍오늘의 학습 키워드

  • 힙(Heap) 자료구조
  • 이중 우선순위 큐 구현
  • PriorityQueue 사용법
  • Comparator 인터페이스

📝 공부한 내용 본인의 언어로 정리하기

오늘은 주어진 명령어를 효율적으로 처리할 수 있는 자료구조로 힙(Heap)을 사용하는 방법에 대해 배웠다. 이중 우선순위 큐 문제를 해결하기 위해 최댓값과 최솟값을 빠르게 찾고 삭제할 수 있는 힙 자료구조를 선택했다. 또한, Java에서 PriorityQueue와 Comparator를 활용해 우선순위 큐를 구현하는 방법도 공부했다.

📖  오늘의 회고

📚 어떤 문제가 있었고, 나는 어떤 시도를 했는지

이중 우선순위 큐 문제를 해결하면서 최댓값과 최솟값을 효율적으로 처리하는 방법에 대한 고민이 있었다. 처음에는 간단한 큐로 구현하려 했지만, 최댓값과 최솟값을 빠르게 찾고 삭제하는 데 비효율적이라는 문제에 직면했다.

🤔 어떻게 해결했는지

🔖 문제 해결 링크 (https://develop-tracking.tistory.com/57)

힙(Heap) 자료구조를 사용하기로 결정했다. Java에서 PriorityQueue를 사용하여 최소 힙과 최대 힙을 각각 구현하고, Comparator를 활용해 우선순위를 설정하여 문제를 해결했다. 이를 통해 최댓값과 최솟값을 빠르게 찾고 삭제할 수 있었다.

자료구조 선택 이유

  • PriorityQueue: Java에서 제공하는 우선순위 큐로, 기본적으로 최소 힙으로 동작합니다. 최대 힙을 만들기 위해 **Collections.reverseOrder()**를 사용합니다.
  • Set: 두 힙 간의 동기화를 유지하기 위해 삽입된 요소를 추적합니다.

문법 및 자료구조 예제

  • PriorityQueue
PriorityQueue<Integer> minHeap = new PriorityQueue<>(); // 최소 힙
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder()); // 최대 힙
  • Set
Set<Integer> syncSet = new HashSet<>(); // 동기화 집합

해결 방법

  1. 입력 연산 처리:
    • 삽입 연산: 최소 힙과 최대 힙에 삽입.
    • 삭제 연산: 각 힙에서 최댓값 또는 최솟값을 삭제.
  2. 동기화 유지:
    • 각 힙에서 요소를 삭제할 때 동기화 집합을 사용하여 유효한 요소만 삭제.

정리

문제의 요구사항을 분석하여 최댓값과 최솟값을 효율적으로 처리하기 위해 힙(Heap) 자료구조를 사용합니다. **PriorityQueue**를 사용하여 최소 힙과 최대 힙을 각각 구현합니다.

동기화를 위해 **Set**을 사용하여 두 힙 간의 일관성을 유지합니다. 삽입 및 삭제 연산을 처리한 후 최종 상태를 반환합니다.

🤓 무엇을 새롭게 알았는지

PriorityQueue를 이용해 힙을 구현하고 Comparator를 사용하여 요소의 우선순위를 설정하는 방법을 새롭게 알게 되었다. 또한, 이중 우선순위 큐와 같은 복잡한 문제를 해결할 때 자료구조를 선택하는 것이 얼마나 중요한지 깨달았다.

 내일 학습할 것은 무엇인지

내일은 더 복잡한 자료구조와 알고리즘에 대해 공부할 계획이다. 특히, 트리 자료구조와 그래프 알고리즘에 대해 집중적으로 학습할 예정이다. 또한, 다양한 문제를 풀면서 효율적인 알고리즘을 설계하고 구현하는 능력을 향상시킬 것이다.

 

그리고 아직.. 진행중.. 어떤 형식으로 해야할까