본문 바로가기

알고리즘&코테

[자료구조 활용] Deque 이렇게도 활용할 수 있다!

백준 24511번을 풀다가 덱을 활용해야 하는 경우가 나왔습니다. 좋은 활용이라고 생각해서 기록을 남겨둡니다.

const [n, t, s, m, c] = require("fs")
  .readFileSync("dev/stdin")
  .toString()
  .trim()
  .split("\n");
const N = +n;
const M = +m;
const type = t.split(" ").map(Number);
const start = s.split(" ").map(Number);
const C = c.split(" ").map(Number);
// Deque 활용 부분
const deque = start.filter((_, i) => type[i] === 0);
// 한 칸 비워두기 기법
const capacity = deque.length + 1;
let head = 0;
// 기존 Deque class를 만들 때에는 -1로 초기화했지만,
// 현재는 deque에 데이터가 들어있기 때문에 deque.length로 초기화
let tail = deque.length;
const ret = C.map((el) => {
  let x = el;

  head = (head - 1 + capacity) % capacity;
  deque[head] = x;

  tail = (tail - 1 + capacity) % capacity;
  return deque[tail];
});

console.log(ret.join(" "));

 

자료구조를 활용하려면 class 키워드를 사용해서 객체를 만들어서 활용해야 한다고 생각했습니다. 그래서 매번 코테 직전에 다시 한번 필요한 자료구조를 살펴보며 빠르게 완성하는데 집중했습니다만, 이번 코테 문제를 풀면서 전부를 구현하지 않고 다른 활용 방법이 있다는 걸 알게 되었습니다.