만족

[Nodejs] 코딩 테스트 필수 테크닉: Stack, Queue, Map 본문

[Nodejs] 코딩 테스트 필수 테크닉: Stack, Queue, Map

Nodejs Satisfaction 2021. 7. 30. 16:20

다른 언어들과는 달리 자바스크립트에서는 내장 자료구조로 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를 사용할 수 있다.



Comments