728x90
1. 문법 개념 요약
JavaScript에서 ... 전개 연산자는 배열의 요소를 펼쳐서 새로운 배열을 만드는 데 사용된다.
const path = [1, 2];
const newPath = [...path, 3]; // 결과: [1, 2, 3]
- 기존 배열 path를 복사하면서 3이라는 새 요소를 뒤에 추가한 형태
- 기존 배열을 변경하지 않고, 새로운 배열을 만들어냄 (불변성 유지)
2. DFS/재귀 구조에서의 활용
DFS(또는 백트래킹)에서 현재 상태(path)를 복사해서 다음 단계로 넘길 때 유용하다.
function dfs(depth, path) {
if (depth === M) {
console.log(path);
return;
}
for (let i = 1; i <= N; i++) {
if (!visited[i]) {
visited[i] = true;
dfs(depth + 1, [...path, i]); // 상태를 복사하여 넘김
visited[i] = false;
}
}
}
- 각 DFS 분기마다 새로운 path 상태를 만들기 때문에, 이전 상태를 건드리지 않음
- push/pop 없이 상태 복제와 전달을 동시에 처리 가능
3. push/pop 방식과 비교
// 기존 상태를 직접 수정하고 복원
path.push(i);
dfs(depth + 1, path);
path.pop(); // 복원 필요
방식 장점 단점
[...path, i] | 불변 상태 유지, 안전함 | 메모리 사용 많고 느릴 수 있음 |
push / pop | 성능 효율적, 메모리 절약 | 상태 복원 수동 관리 필요 |
- 성능과 메모리가 중요한 문제에서는 push/pop이 더 유리할 수 있음
- 그러나 코드 가독성, 안전성 측면에서는 ...path 방식이 더 직관적
4. 마무리 회고
- 알고리즘 문제 풀이에서 ... 전개 연산자는 상태 관리를 깔끔하게 해주는 좋은 도구다.
- 특히 DFS처럼 재귀 호출이 많은 구조에서는 불변 상태 유지가 디버깅과 테스트에 큰 도움이 된다.
- 단, 입력이 커지고 시간제한이 빡빡할 때는 push/pop 방식으로 성능 최적화를 고려하는 것이 좋다.
요약
- [...path, i]: 새 배열을 만들어 재귀에 넘김 → 안전하고 직관적
- push/pop: 기존 배열 재사용 → 성능 유리하지만 수동 복원 필요
728x90
'언어 · 런타임 > JavaScript' 카테고리의 다른 글
백준 JavaScript 제출법 총정리: fs, readline 입출력 예제와 주의사항 (0) | 2025.04.24 |
---|---|
JavaScript란? (0) | 2024.03.05 |
[Node.js] 이벤트 디멀티플렉싱 (0) | 2024.03.05 |
JavaScript 배열 복사: spread와 map의 차이 완벽 정리 (얕은 복사 vs 깊은 복사) (0) | 2024.02.05 |