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

2025. 8. 4. 17:21·Language/JavaScript
728x90

레벨 4에서는 심화된 알고리즘과 자료구조를 JavaScript로 다룰 수 있어야 합니다. 그래프와 트리 등 복잡한 구조의 탐색, 백트래킹, 동적 계획법, 그리고 언어의 한계를 뛰어넘는 최적화 기법 등이 요구됩니다.

그래프 탐색 (DFS/BFS 활용)

  • 그래프 표현: 인접 리스트/행렬로 표현
  • 방문 처리: 배열 또는 Set 사용
  • 다중 컴포넌트 탐색 필요
  • 가중치 그래프: 다익스트라(우선순위 큐 필요), 0-1 BFS, A* 알고리즘

트리 구조 및 조작

  • 트리 순회: 전위, 중위, 후위 (DFS/BFS 활용)
  • 트라이(Trie) 구현:
    class TrieNode {
    constructor() { this.children = {}; this.end = false; }
    }
    class Trie {
    constructor() { this.root = new TrieNode(); }
    insert(word) {
      let node = this.root;
      for (const ch of word) {
        if (!node.children[ch]) node.children[ch] = new TrieNode();
        node = node.children[ch];
      }
      node.end = true;
    }
    }
  • 세그먼트 트리: 배열 기반, 1-based index 사용

정렬 커스터마이징

  • 다중 기준 정렬:

    arr.sort((a, b) => {
    if (a.key1 !== b.key1) return a.key1 - b.key1;
    return b.key2 - a.key2;
    });
  • 안정 정렬이 필요할 경우 인덱스 추가 또는 직접 stable sort 구현

우선순위 큐 (Heap)

  • MaxHeap 예시:
    class MaxHeap {
    constructor() { this.heap = [null]; }
    push(value) {
      this.heap.push(value);
      let i = this.heap.length - 1;
      while (i > 1 && this.heap[Math.floor(i/2)] < this.heap[i]) {
        [this.heap[i], this.heap[Math.floor(i/2)]] = [this.heap[Math.floor(i/2)], this.heap[i]];
        i = Math.floor(i/2);
      }
    }
    pop() {
      if (this.heap.length === 1) return null;
      const top = this.heap[1];
      this.heap[1] = this.heap.pop();
      let i = 1;
      while (true) {
        let left = 2*i, right = 2*i+1, largest = i;
        if (left < this.heap.length && this.heap[left] > this.heap[largest]) largest = left;
        if (right < this.heap.length && this.heap[right] > this.heap[largest]) largest = right;
        if (largest === i) break;
        [this.heap[i], this.heap[largest]] = [this.heap[largest], this.heap[i]];
        i = largest;
      }
      return top;
    }
    }

DFS + 백트래킹

const result = [];
const temp = [];
function backtrack(start) {
  result.push([...temp]);
  for (let i = start; i < arr.length; i++) {
    temp.push(arr[i]);
    backtrack(i + 1);
    temp.pop();
  }
}
  • 활용 예시: 순열, 조합, N-Queen, 부분집합, 제약 충족 해 찾기 등

동적 계획법 (DP)

  • 하향식 (memoization):

    const memo = {};
    function fib(x) {
    if (x < 2) return x;
    if (memo[x]) return memo[x];
    return memo[x] = fib(x-1) + fib(x-2);
    }
  • 상향식 (tabulation):

    const dp = [0, 1];
    for (let i = 2; i <= n; i++) {
    dp[i] = dp[i-1] + dp[i-2];
    }
  • 2차원 DP:

    const dp = Array.from({length: N}, () => Array(M).fill(0));
  • 비트마스크 DP: dp[mask][i] 패턴

비트 연산 테크닉

  • 부분집합 생성: for (let mask = 0; mask < (1 << n); mask++)
  • 비트카운트: x.toString(2).split('0').join('').length
  • XOR 활용: 스왑 또는 고유값 추출

JS 구현 시 주의사항

  1. 대용량 처리: readFileSync + 정규식 분할
  2. 메모리 관리: 큰 문자열은 Array.join, 큰 배열은 복사 자제
  3. 정수 범위: BigInt 사용 필요시 구분
  4. 깊은 비교: 직렬화 또는 고유 키 활용
  5. Node.js 특성: 싱글스레드 환경

레벨 4는 JS로 알고리즘 문제를 풀면서 언어적 한계와 성능 최적화까지 고려하는 수준입니다. 위 기법들을 정확히 이해하고 활용하는 것이 중요합니다.

728x90
저작자표시 비영리 변경금지 (새창열림)

'Language > JavaScript' 카테고리의 다른 글

JavaScript 코딩테스트 대비 정리 (레벨 5)  (1) 2025.08.04
JavaScript 코딩테스트 대비 정리 (레벨 3)  (1) 2025.08.04
JavaScript 코딩테스트 대비 정리 (레벨 2)  (1) 2025.08.04
JavaScript 코딩테스트 대비 정리 (레벨 1)  (1) 2025.08.04
'Language/JavaScript' 카테고리의 다른 글
  • JavaScript 코딩테스트 대비 정리 (레벨 5)
  • JavaScript 코딩테스트 대비 정리 (레벨 3)
  • JavaScript 코딩테스트 대비 정리 (레벨 2)
  • JavaScript 코딩테스트 대비 정리 (레벨 1)
Kun Woo Kim
Kun Woo Kim
안녕하세요, 김건우입니다! 웹과 앱 개발에 열정적인 전문가로, React, TypeScript, Next.js, Node.js, Express, Flutter 등을 활용한 프로젝트를 다룹니다. 제 블로그에서는 개발 여정, 기술 분석, 실용적 코딩 팁을 공유합니다. 창의적인 솔루션을 실제로 적용하는 과정의 통찰도 나눌 예정이니, 궁금한 점이나 상담은 언제든 환영합니다.
  • Kun Woo Kim
    WhiteMouseDev
    김건우
  • 깃허브
    포트폴리오
    velog
  • 전체
    오늘
    어제
  • 공지사항

    • [인사말] 이제 티스토리에서도 만나요! WhiteMouse⋯
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 분류 전체보기 (121) N
      • Frontend Development (51)
      • Backend Development (25)
      • Algorithm (33)
        • 백준 (11)
        • 프로그래머스 (17)
        • 알고리즘 (5)
      • Infra (1)
      • 자료구조 (3)
      • Language (5) N
        • JavaScript (5) N
  • 링크

    • Github
    • Portfolio
    • Velog
  • 인기 글

  • 태그

    tailwindcss
    frontend development
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kun Woo Kim
JavaScript 코딩테스트 대비 정리 (레벨 4)
상단으로

티스토리툴바