[Nodejs] 코딩 테스트 필수 테크닉: Stack, Queue, Map
다른 언어들과는 달리 자바스크립트에서는 내장 자료구조로 object와 array만을 지원한다.
(사실 지원하는것도 몇개 있긴 한데 잘 안쓴다)
Stack
스택은 그림처럼 나중에 들어온 것이 먼저 나오는(후입선출; LIFO) 특성을 가진 자료구조이다.
스택에 자료를 추가하는 행위를 push라 하고,
스택에서 자료를 제거하는 행위를 pop이라 한다.
const arr= [];
const push= (data)=>{
arr.push(data);
};
const pop= ()=>{
return arr.pop();
}
push(1);
//arr= [1]
push(2);
//arr= [1,2]
pop();
//arr= [1]
js에서는 array의 push와 pop을 이용해 이를 구현할 수 있다.
Queue
queue는 먼저 들어간 것이 먼저 나오는(선입선출; FIFO) 자료구조이다.
큐에 자료를 추가하는 행위를 enqueue,
큐에서 자료를 제거하는 행위를 dequeue라고 한다.
const arr= [];
const enqueue= (data)=>{
arr.push(data);
};
const dequeue= ()=>{
return arr.shift();
};
enqueue(1);
//arr= [1];
enqueue(2);
//arr= [1,2]
dequeue();
//arr= [2]
js에서는 array의 push와 shift를 이용해 이를 구현할 수 있다.
Map
map은 key와 value가 묶인 데이터셋을 홀드하는 자료구조이다.
어떤 value에 접근하고자 할 때 key값을 이용해 value에 접근하는 형태를 갖는다.
가령 f(x)= 2x라는 함수를 생각해본다면 쉽다.
이때 x값이 key가 되고, f(x)의 값이 value가 된다.
const map1 = new Map();
map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);
console.log(map1.get('a'));
// expected output: 1
js에서 Map자료구조를 지원하기는 하나 굳이 사용하지 않아도
기존 존재하는 개념으로 충분히 구현할 수 있다.
바로 object를 이용하는 방법이다.
const map= {};
const mGet= (key)=>{
return map[key];
};
const mSet= (key, value)=>{
map[key]= value;
}
맵의 모든 키에 대해 반복할 때,
Map.prototype.keys()나 Object.keys()를 이용할 수 있다.
const map= {};
const mGet= (key)=>{
return map[key];
};
const mSet= (key, value)=>{
map[key]= value;
}
mSet('a', 1);
mSet('b', 2);
//map= {a: 1, b: 2}
//Object.keys(map)은 object map의 모든 키값을 반환한다.
//['a', 'b']
Object.keys(map).map(key=>{
//map[key]로 해당 key에 해당하는 value를 가져올 수 있다.
console.log(key, map[key]);
});
//printed in console
//a 1
//b 2
또는 모든 키값이 아니라, 모든 value값들만 불러오고 싶다면
Object.keys대신 Object.values를 사용할 수 있다.