Language/JavaScript

JavaScript 코딩테스트 대비 정리 (레벨 3)

Kun Woo Kim 2025. 8. 4. 17:20
728x90

레벨 3에서는 재귀 알고리즘과 자료구조를 직접 구현하거나 활용하는 문제가 등장합니다. 재귀 호출, 그래프 탐색, 큐/스택 구현, 이진 탐색과 같은 알고리즘 패턴을 자바스크립트로 다룰 수 있어야 합니다. 또한 문자열/배열 조작 기법과 일부 유용한 메서드의 심화 사용이 요구됩니다.


✅ 재귀 함수

재귀는 함수가 자기 자신을 호출하여 문제를 해결하는 기법입니다. 예를 들어 팩토리얼 계산이나 DFS 탐색을 재귀로 구현할 수 있습니다. 종료 조건(base case)을 명확히 해야 하며, 너무 깊은 재귀는 Maximum call stack size exceeded 오류가 발생할 수 있습니다.

function factorial(n) {
  if (n <= 1) return 1;
  return n * factorial(n - 1);
}

✅ DFS / BFS (깊이/너비 우선 탐색)

DFS

재귀 또는 스택으로 구현하며, 깊이 우선으로 탐색합니다.

function dfs(v, visited) {
  visited[v] = true;
  for (const next of graph[v]) {
    if (!visited[next]) dfs(next, visited);
  }
}

BFS

큐를 이용하여 너비 우선으로 탐색합니다.

function bfs(start) {
  const queue = [start];
  const visited = { [start]: true };
  while (queue.length) {
    const v = queue.shift();
    for (const next of graph[v]) {
      if (!visited[next]) {
        visited[next] = true;
        queue.push(next);
      }
    }
  }
}

✅ 큐와 스택 직접 구현

class Queue {
  constructor() {
    this.arr = [];
  }
  enqueue(x) { this.arr.push(x); }
  dequeue() { return this.arr.shift(); }
  isEmpty() { return this.arr.length === 0; }
}

✅ 이진 탐색 (Binary Search)

function binarySearch(arr, target) {
  let lo = 0, hi = arr.length - 1;
  while (lo <= hi) {
    const mid = Math.floor((lo + hi) / 2);
    if (arr[mid] === target) return mid;
    if (arr[mid] < target) lo = mid + 1;
    else hi = mid - 1;
  }
  return -1;
}

✅ 문자열/배열 변형 테크닉

  • 투 포인터
  • 슬라이딩 윈도우
  • 문자열 뒤집기: str.split('').reverse().join('')
  • 부분 치환: str.replaceAll("a", "b")
  • 배열 삽입/삭제: splice()

✅ 문자열 조작

  • 정규식 치환: str.replace(/[^a-z]/g, "")
  • 중복 문자 압축: (.)\1+
  • split with regex: str.split(/[\s,]+/)

✅ 배열 평탄화: flat

[1, [2, [3, 4]]].flat(2); // [1, 2, 3, 4]

✅ reduceRight

["a", "b", "c"].reduceRight((acc, x) => acc + x); // "cba"

✅ Object.entries & fromEntries

const count = { a: 3, b: 1 };
const sorted = Object.entries(count).sort((a, b) => b[1] - a[1]);

⚠️ JS 특유의 주의점

  • Number 정밀도, BigInt 필요 여부
  • 문자열 이터레이션 주의 (이모지 등)
  • 재귀 깊이 제한
  • 불변성 고려 (slice, spread 등으로 복사)

이상으로 레벨 3 중급 알고리즘 활용에서 자주 사용되는 JS 문법과 기법들을 정리했습니다. 문제 풀이에 반복적으로 등장하는 테크닉이므로 숙련도를 높여두면 유리합니다.

728x90