반응형
오늘은 직접 구현한 queue를 활용해서 아래 프로그래머스 lv2 문제를 풀어볼께요!
https://school.programmers.co.kr/learn/courses/30/lessons/42587
만약 직접 구현하지 않는다면 이렇게 쉽게 끝내지만..! (사서 고생하는 스타일..)
저는 직접 구현하기로 했으니 ... 엄청 긴 코드를 꺼내보죠....
function solution(priorities, location) {
let rank = 0;
while(true){
const front = priorities.shift(); // 맨 앞의 요소를 제거
if(front < Math.max(...priorities)){ // 리스트에서 최대와 비교시에 최대면 location, 아니면 다시 뒤로 푸시
priorities.push(front);
location = !location ? priorities.length - 1 : location - 1
}else {
if(!location) return rank + 1;
location--;
rank++;
}
}
}
그러면 이제 직접 구현한 큐를 통해 구해보도록 할게요!
지난 시간의 큐에서 필요없는 메소드는 제거해서 사용하도록 하지요
class Node {
constructor(val) {
this.val = val;
this.next = null;
}
}
class Queue {
#size = 0;
constructor() {
this.front = null;
this.rear = null;
}
enqueue(val) {
const node = new Node(val);
this.#size++;
if (!this.rear) this.front = node;
else this.rear.next = node;
this.rear = node;
}
dequeue() {
if (!this.front) throw new Error('Element does not exist.');
this.#size--;
const val = this.front.val;
this.front = this.front.next;
if (!this.front) this.rear = null;
return val;
}
size() {
return this.#size;
}
getQueue() {
let queue = [];
let head = this.front;
while (head) {
queue.push(head.val);
head = head.next;
}
return queue;
}
}
function solution(priorities, location) {
let rank = 0;
const queue = new Queue();
priorities.forEach(p => queue.enqueue(p));
while(queue.size()){
const front = queue.dequeue();
if(front < Math.max(...queue.getQueue())){
queue.enqueue(front);
location = !location ? queue.size() - 1 : location - 1
}else {
if(!location) return rank + 1;
location--;
rank++;
}
}
}
여기서도 역시나 getQueue의 메서드에서 리스트를 출력하는 과정에서 속도 문제가 있어보여요!
통과는 가능하지만 for문을 통해 list를 리턴해주는 과정이 역시나 속도를 잡아먹네요 .... ㅎㅎㅎㅎ
dequeue의 과정이 엄청 뛰어난 성과를 이루는 문제(데이터 길이가 엄청 길다면? or 배열 자체를 리턴할 필요가 없다면?)가 아닌 이상은 그냥 js 기본 배열 쓰는게 좋아보여요!ㅎㅎ
반응형
'자료구조' 카테고리의 다른 글
Javascript 자료구조 2. 큐(queue) (0) | 2023.06.21 |
---|---|
Javascript 자료구조 1. 스택(stack) 활용 (0) | 2023.06.17 |
Javascript 자료구조 1. 스택(stack) (0) | 2023.06.17 |