‘이 언어’로 코딩테스트 준비하는 취업준비생… 심장병 확률 44%⬆

코딩테스트를 javascript로 그동안 준비했었는데 결국에는 python으로 갈아탔습니다.

평소에도 코드를 javascript로 작성하기에 문법에 익숙해서 구현하기가 편한데, 다른 언어들은 꾸준히 사용하지 않다보니 문법을 자주 잊어버리게 돼요. 코딩테스트 언어로 javascript를 선택하여 언어 문법 자체도 잘 알게 되고 익숙한 언어로 코딩테스트도 수월하게 볼 수 있으니까 일석이조 아닐까요?

이 이론은 여러번의 실험 끝에 저를 배신했습니…


This content originally appeared on DEV Community and was authored by Chan

코딩테스트를 javascript로 그동안 준비했었는데 결국에는 python으로 갈아탔습니다.

평소에도 코드를 javascript로 작성하기에 문법에 익숙해서 구현하기가 편한데, 다른 언어들은 꾸준히 사용하지 않다보니 문법을 자주 잊어버리게 돼요. 코딩테스트 언어로 javascript를 선택하여 언어 문법 자체도 잘 알게 되고 익숙한 언어로 코딩테스트도 수월하게 볼 수 있으니까 일석이조 아닐까요?

이 이론은 여러번의 실험 끝에 저를 배신했습니다. 라이브러리 없는 javascript의 실용성이 너무나도 떨어지기 때문이에요. 어떤 부분이 javascript를 비생산적으로 만들고 코딩테스트에서 여러분을 불리하게 만들 수 있는지 소개합니다.

javascript를 코딩테스트 언어로 지원하는 기업이 드물다.

프로그래머스 환경에서 코딩테스트를 지원하는 기업이 아닌 경우 높은 확률로 javascript를 지원하지 않습니다. 반면 C++, Java, Python의 경우에는 대기업부터 스타트업까지 전부 다 지원하게 됩니다. 서비스 기업의 채용 프로세스를 쉽게 통과할 수 있는 분들의 경우에는 좋아하는 언어로 코딩테스트를 보셔도 되지만 채용 상황이 좋지 않아서 어떤 기업이든 일단 취업을 하시길 희망시는 분들의 경우에는 저 세가지 언어 중에서 고르시는 것이 좋지 않을까 싶네요.

array를 사용하여 queue를 구현할 경우 O(n)의 시간복잡도

queue를 어떻게 구현하려고 하셨나요? 대부분 아래의 아이디어를 떠올리셨을 겁니다.

array.push()와 array.shift()를 사용해서 구현해야지.
array.unshift()와 array.pop()을 사용해서 구현해야지.

하지만 이 구현 방식으로는 높은 확률로 시간복잡도 제한에 걸려서 문제의 시간 제한을 통과하지 못할 겁니다. 따라서 stack 두개를 활용하여 직접 queue를 구현해야 합니다.

class Queue {
  constructor(){
    this.first = [];
    this.second = [];
  }

  get length() {
    return this.first.length + this.second.length;
  }

  get isEmpty() {
    return this.length === 0;
  }

  insert(element) {
    this.first.push(element);
  }

  pop(element) {
    if (this.isEmpty) {
      return null;
    }

    while (this.second.length > 0) {
      this.second.push(this.first.pop());
    }

    return this.second.pop();
  }
}

코딩테스트 문제의 구현에서 점점 멀어지고 기본적인 ADT/자료구조 구현까지 검증을 받아야 합니다. 다른 사람들이 문제를 해결하는 구현을 하고 있을 때 우리는 queue를 구현하고 있어야 하는 겁니다. Queue를 아무리 빨리 구현할 수 있다고 해도 그 시간에 문제를 고민하고 해결하는데 노력을 하면 더 좋은 결과를 얻을 수 있지 않을까요?

함수형 프로그래밍한다고 reduce를 썼을 때 메모리 제한이 너무 쉽게 걸린다

FE개발자 분들은 사이드 이펙트를 최소화하기 위해서 함수형 프로그래밍 스타일로 코드를 작성하는 것을 best practice로 여기셨고 그렇게 코드를 작성하려고 노력해오셨을 겁니다. 코딩테스트는 그 노력을 우습게 배신합니다.

다음 코드를 봅시다.

const graph = edges.reduce((acc, [vertex1, vertex2]) => {
  return {
    ...acc,
    vertex1: [ ...(acc.vertex1 ?? []), vertex2 ],
    vertex2: [ ...(acc.vertex2 ?? []), vertex1 ],
  }
}, {}});

graph를 만드는 중간 과정에서 객체가 계속 재생성되는데, 가비지 콜렉션이 각 step이 끝난 즉시 이루어지지 않는다면 최악의 경우 O(n^2)의 공간 복잡도를 차지할 수 있습니다. 메모리 제한이 까다로운 경우에는 실패 원인이 될 수도 있습니다. 따라서 다음과 같이 코드를 수정하여야 객체를 재사용하여 최악의 경우에도 O(n) 공간 복잡도를 유지할 수 있습니다.

const graph = edges.reduce((acc, [vertex1, vertex2]) => {

  if (!(vertex1 in acc)) {
    acc[vertex1] = [];
  }
  if (!(vertex2 in acc)) {
    acc[vertex2] = [];
  }

  acc[vertex1].push(vertex2);
  acc[vertex2].push(vertex1);

  return acc1;
}, {}});

우선순위 큐(PriorityQueue)를 항상 직접 구현해야한다.

java에서는 import java.util.PriorityQueue를 통해 미리 구현된 우선순위 큐를 사용할 수 있습니다.

python에서도 마찬가지로 from queue import PriorityQueue를 통해 미리 구현된 우선순위 큐를 사용할 수 있습니다.

javascript는요? 그런 거 없습니다. 개발자가 직접 구현해야합니다.

class PriorityQueue() {
  constructor() {
    this.queue = [];
  }

  get length() {
    return this.queue.length;
  }

  get isEmpty() {
    return this.length === 0;
  }

  swap(i, j) {
    [ this.queue[i], this.queue[j] ] = [ this.queue[j], this.queue[i] ];
  }

  getParent(index) {
    return Math.floor(index / 2) - 1;
  }

  bubbleUp() {
    let index = this.queue.length - 1;
    while (index > 0){
      const parent = this.getParent(index);
      if (this.queue[index] > this.queue[parent]) {
        return;
      }
      this.swap(index, parent);
      index = parent;
    }
  }

  insert(element) {
    if (this.isEmpty) {
      this.queue.push(element);
      return;
    }
    this.queue.push(element);
    this.bubbleUp();
  }

  getChidren(index){
    return [ 2 * index + 1, 2 * index + 2 ];
  }

  bubbleDown() {
    let index = 0;
    while (index < this.queue.length) {
      let smallest = index; 
      const [left, right] = this.getChildren(index);

      if (left < this.queue.length && this.queue[index] > this.queue[left]) {
        smallest = left;
      }
      if (right < this.queue.length && this.queue[index] > this.queue[right]) {
        smallest = right;
      }

      if (smallest === index) {
        return;
      }
      this.swap(index, smallest);
      index = smallest;
    }
  }

  delete() {
    if (this.isEmpty) {
      return null;
    }
    if (this.length === 1) {
      return this.queue.pop();
    }
    this.swap(0, this.queue.length - 1);
    const root = this.queue.pop();
    this.bubbleDown();
    return root;
  }
}

MinHeap을 구현하는데 15분이 걸렸습니다. 문제를 해결하는 구현은 하지도 못한채 자료구조를 구현하고 테스트 하는데 이만큼 시간을 쓰는 것이 아깝지 않나요?

결론

코딩테스트는 자료구조를 구현하는데 노력을 쏟기보다 어떤 자료구조를 선택하는 게 효율적인지 판단하고, 구현하고, 테스트해보는데 시간을 쏟는 테스트라고 생각합니다. 여러분의 자료구조 구현 능력에 실수가 있어서 다른 사람보다 불리한 시작을 하기보다는 다른 언어를 선택하면 코딩테스트에서 좋은 결과를 얻어갈 수 있지 않을까요?


This content originally appeared on DEV Community and was authored by Chan


Print Share Comment Cite Upload Translate Updates
APA

Chan | Sciencx (2025-11-09T14:52:04+00:00) ‘이 언어’로 코딩테스트 준비하는 취업준비생… 심장병 확률 44%⬆. Retrieved from https://www.scien.cx/2025/11/09/%ec%9d%b4-%ec%96%b8%ec%96%b4%eb%a1%9c-%ec%bd%94%eb%94%a9%ed%85%8c%ec%8a%a4%ed%8a%b8-%ec%a4%80%eb%b9%84%ed%95%98%eb%8a%94-%ec%b7%a8%ec%97%85%ec%a4%80%eb%b9%84%ec%83%9d-%ec%8b%ac%ec%9e%a5/

MLA
" » ‘이 언어’로 코딩테스트 준비하는 취업준비생… 심장병 확률 44%⬆." Chan | Sciencx - Sunday November 9, 2025, https://www.scien.cx/2025/11/09/%ec%9d%b4-%ec%96%b8%ec%96%b4%eb%a1%9c-%ec%bd%94%eb%94%a9%ed%85%8c%ec%8a%a4%ed%8a%b8-%ec%a4%80%eb%b9%84%ed%95%98%eb%8a%94-%ec%b7%a8%ec%97%85%ec%a4%80%eb%b9%84%ec%83%9d-%ec%8b%ac%ec%9e%a5/
HARVARD
Chan | Sciencx Sunday November 9, 2025 » ‘이 언어’로 코딩테스트 준비하는 취업준비생… 심장병 확률 44%⬆., viewed ,<https://www.scien.cx/2025/11/09/%ec%9d%b4-%ec%96%b8%ec%96%b4%eb%a1%9c-%ec%bd%94%eb%94%a9%ed%85%8c%ec%8a%a4%ed%8a%b8-%ec%a4%80%eb%b9%84%ed%95%98%eb%8a%94-%ec%b7%a8%ec%97%85%ec%a4%80%eb%b9%84%ec%83%9d-%ec%8b%ac%ec%9e%a5/>
VANCOUVER
Chan | Sciencx - » ‘이 언어’로 코딩테스트 준비하는 취업준비생… 심장병 확률 44%⬆. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2025/11/09/%ec%9d%b4-%ec%96%b8%ec%96%b4%eb%a1%9c-%ec%bd%94%eb%94%a9%ed%85%8c%ec%8a%a4%ed%8a%b8-%ec%a4%80%eb%b9%84%ed%95%98%eb%8a%94-%ec%b7%a8%ec%97%85%ec%a4%80%eb%b9%84%ec%83%9d-%ec%8b%ac%ec%9e%a5/
CHICAGO
" » ‘이 언어’로 코딩테스트 준비하는 취업준비생… 심장병 확률 44%⬆." Chan | Sciencx - Accessed . https://www.scien.cx/2025/11/09/%ec%9d%b4-%ec%96%b8%ec%96%b4%eb%a1%9c-%ec%bd%94%eb%94%a9%ed%85%8c%ec%8a%a4%ed%8a%b8-%ec%a4%80%eb%b9%84%ed%95%98%eb%8a%94-%ec%b7%a8%ec%97%85%ec%a4%80%eb%b9%84%ec%83%9d-%ec%8b%ac%ec%9e%a5/
IEEE
" » ‘이 언어’로 코딩테스트 준비하는 취업준비생… 심장병 확률 44%⬆." Chan | Sciencx [Online]. Available: https://www.scien.cx/2025/11/09/%ec%9d%b4-%ec%96%b8%ec%96%b4%eb%a1%9c-%ec%bd%94%eb%94%a9%ed%85%8c%ec%8a%a4%ed%8a%b8-%ec%a4%80%eb%b9%84%ed%95%98%eb%8a%94-%ec%b7%a8%ec%97%85%ec%a4%80%eb%b9%84%ec%83%9d-%ec%8b%ac%ec%9e%a5/. [Accessed: ]
rf:citation
» ‘이 언어’로 코딩테스트 준비하는 취업준비생… 심장병 확률 44%⬆ | Chan | Sciencx | https://www.scien.cx/2025/11/09/%ec%9d%b4-%ec%96%b8%ec%96%b4%eb%a1%9c-%ec%bd%94%eb%94%a9%ed%85%8c%ec%8a%a4%ed%8a%b8-%ec%a4%80%eb%b9%84%ed%95%98%eb%8a%94-%ec%b7%a8%ec%97%85%ec%a4%80%eb%b9%84%ec%83%9d-%ec%8b%ac%ec%9e%a5/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.