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
'Language > JavaScript' 카테고리의 다른 글
JavaScript 코딩테스트 대비 정리 (레벨 5) (1) | 2025.08.04 |
---|---|
JavaScript 코딩테스트 대비 정리 (레벨 4) (1) | 2025.08.04 |
JavaScript 코딩테스트 대비 정리 (레벨 2) (1) | 2025.08.04 |
JavaScript 코딩테스트 대비 정리 (레벨 1) (1) | 2025.08.04 |