‣
First In First Out, 선입선출의 구조를 가진 선형 자료구조
큐의 특징
대기열
의 특성과 같다.Dequeue
로 원소가 나가는 “Front"
부분과 Enqueue
로 원소가 들어오는 **“Rear"
**로 구성큐의 종류
선형 큐
1.배열을 통한 큐 구현
Queue를 구현할 경우, EnQueue와 DeQueue 시 비워진 공간을 매꾸기 위해 O(n)이 소요
되기 때문에 추천되지 않는다.
// 직접 구현해보기
class Queue {
enqueue(){}
dequeue(){}
peek(){}
size(){}
}
2.링크드 리스트를 통한 구현
Head = Front
, Tail = Rear
로 대응하여 구현 가능
//직접 구현해보기
class Node{}
class Queue{
enqueue(){}
dequeue(){}
peek(){}
size(){}
}
참고
shift
를 통해 간단히 구현가능하지만, 선형시간이 소요되기 때문에, 본질적인 큐의 구조와 다르다
환형 큐
Front와 Rear가 이어져있는 Queue
💻프린터 문제 큐를 이용하여 풀어보기
문제이해
order
)로 관리풀이방법
[ [중요도, idx], [1,1], [3,2], [2,3] ]
로 파싱[2,0]
2 vs 1, 3, 2
, isMostImportant()
order
)가 target위치(location
)가 일치한다면 order리턴![ [1,1], [3,2], [2,3], [2,0] ]
function solution(priorities, location) {
let order = 0;
priorities = priorities.map((p,i)=>[p,i])
function isMostImportant(p, pList){
pList = pList.map(p => p[0])
return p >= Math.max(...pList);
}
// 재귀로 풀기
function print(pList){
let [p, l] = pList.shift()
if(isMostImportant(p, pList)){
order++
if(l === location) return order
} else {
pList.push([p,l])
}
return print(pList)
}
return print(priorities)
}
키와 값을 받아, 키를 해싱하여 나온 index에 값을 저장하는 선형 자료구조
해시함수란
입력받은 값을 특정 범위 내 숫자로 변경하는 함수
해시충돌