LeetCode 23.08.16 : Sliding Window Maximum
글 작성자: Doublsb
https://leetcode.com/problems/sliding-window-maximum/
풀이
- 보자마자 이중 for문? 생각했지만 제한조건에 nums.length가 10의 5승인 걸 보고 그만둠.
- 우선순위 큐로 최초 k 사이즈만큼의 num들을 정렬해놓고, 다음 k + index에 위치한 숫자를 EnQueue하는 방식으로 생각.
- 우선순위 큐 검색 도중 window 안에 들어와있는 값이 아니면 삭제해보도록 하자.
- 닷넷에는 이미 구현된 PriorityQueue가 있다.
public class IntMaxCompare : IComparer<int>
{
public int Compare(int x, int y) => y.CompareTo(x);
}
static int[] Solution(int[] nums, int k)
{
if (k == 1)
return nums;
var result = new int[nums.Length - k + 1];
var queue = new PriorityQueue<int, int>(new IntMaxCompare());
for (int i = 0; i < k; i++)
queue.Enqueue(i, nums[i]);
for (int i = k; i <= nums.Length; i++)
{
int maxIdx = queue.Peek();
while (maxIdx <= i - k - 1)
{
queue.Dequeue();
maxIdx = queue.Peek();
}
result[i - k] = nums[maxIdx];
if(i == nums.Length)
break;
queue.Enqueue(i, nums[i]);
}
return result;
}
결과
Runtime 436 ms (상위 40.53%)
Memory 61.8 MB (상위 32.54%)
피드백
첫 개시 일일 문제가 Hard 난이도라서 당황했는데, 안정적으로 금방 해결해서 다행인 듯.
PriorityQueue 지원 때문에 .Net 7.0 SDK를 설치하느라 괜히 더 걸렸다 (...)
반응형
'프로그래밍 > 알고리즘' 카테고리의 다른 글
프로그래머스/위클리 챌린지/최소직사각형 (0) | 2021.09.27 |
---|---|
프로그래머스/위클리 챌린지/입실 퇴실 (1) | 2021.09.23 |
프로그래머스/위클리 챌린지/복서 정렬하기 (0) | 2021.09.06 |
프로그래머스/위클리 챌린지/모음 사전 (0) | 2021.08.31 |
프로그래머스/위클리 챌린지/직업군 추천하기 (0) | 2021.08.24 |
댓글
이 글 공유하기
다른 글
-
프로그래머스/위클리 챌린지/최소직사각형
프로그래머스/위클리 챌린지/최소직사각형
2021.09.27 -
프로그래머스/위클리 챌린지/입실 퇴실
프로그래머스/위클리 챌린지/입실 퇴실
2021.09.23 -
프로그래머스/위클리 챌린지/복서 정렬하기
프로그래머스/위클리 챌린지/복서 정렬하기
2021.09.06 -
프로그래머스/위클리 챌린지/모음 사전
프로그래머스/위클리 챌린지/모음 사전
2021.08.31