2024/07/20 4

[PriorityQueue][Medium] 621. Task Scheduler.

https://leetcode.com/problems/task-scheduler/description/ char 열의 입력이 주어진다. 각 문자는 task를 의미하고, 각 task를 한 후 n 만큼 해당 task를 idle 하고 해야 한다.이때 모든 task를 처리하기 위한 cycle 수를 구하라.  실 사례에 알고리즘을 적용하기 좋은, 괜찮은 문제다.  우선 등장하는 task가 알파벳 대문자로 주어졌다. 같은 task대로 우선 빈도수로 정리를 해 본다. 빈도수와 task처리는 어떤 관계가 있을지 먼저 생각해 본다.idle 시간을 고려하여 많은 빈도수의 task를 먼저 처리해야 최종 cycle이 줄어 든다.  최종 그림은 아래와 같이 설계할 수 있게 된다.  "빈도수가 많은 할 수 있는 상태의 Task를..

Leetcode/NeetCode 2024.07.20

[PriorityQueue][Medium] 215. Kth Largest Element in an Array

https://leetcode.com/problems/kth-largest-element-in-an-array/description/ 주어진 정수 배열에서 k 번째로 큰 수를 찾아라. k번째로 큰 수는 minPriority Queue 에 배열을 넣고, 큐 사이즈가 k 가 될때까지 큐를 pop한다. 그리되면 사이즈 k 보다 작은 값들은 pop되고 k 개수 만큼 큰 값들만 남게 된다.  그 중 top이 k 번째로 큰 값이 된다.  코드 int findKthLargest(vector& nums, int k) { priority_queue, greater > minPQ; for (int q = 0; q k) minPQ.pop(); return minPQ.top();}   결과

Leetcode/NeetCode 2024.07.20

[PriorityQueue][Medium] 973. K Closest Points to Origin

https://leetcode.com/problems/k-closest-points-to-origin/description/ 2차원의 정점 정보가 주어질 때 원점에서 k 번째까지 가까운 점들을 찾아라.  priory queue를 구성할 줄 안다면 어렵지 않은 문제.  거리, index의 pair data로 queue를 구성해야 한다. 다만 여기서 거리는 크기의 비교로만 쓰이므로, root 연산은 해지 않아도 된다.(정확할 필요가 없다) 코드더보기vector> kClosest(vector>& points, int k) { priority_queue, vector>, greater>> pq; for (int q = 0; q > vRet; for (int q = k; q > 0; --q) ..

Leetcode/NeetCode 2024.07.20

[PriorityQueue][Easy] 1046. Last Stone Weight

https://leetcode.com/problems/last-stone-weight/description/ 주어진 정수 배열은 돌의 무게을 의미한다. 가장 무거운 두개를 서로 부딪힌다. 무게가 같으면 사라진다. 다르면, 그 차가 남는다.  마지막 남은 돌의 무게를 구하라. 이거는 easy 난이도가 맞다. 직관대로 풀어 준다.  코드 더보기int lastStoneWeight(vector& stones) { priority_queue pqBuff; for (int q = 0; q = 2) { int first = pqBuff.top(); pqBuff.pop(); int second = pqBuff.top(); pqBuff.pop(); if (first ..

Leetcode/NeetCode 2024.07.20