이번 글에서는 배열을 입력받아 그 역순 배열을 반환하는 함수를 작성해 보겠습니다. reverse() 같은 내장 메서드 대신 for 루프를 직접 활용해 구현하는 방법을 단계별로 살펴봅니다.
예제 배열
먼저 다음과 같은 샘플 배열이 있다고 가정해 보겠습니다.
const arr = [7, 2, 3, 4, 5, 7, 8, 12, -12, 43, 6];
구현 코드
핵심 아이디어는 간단합니다. 원본 배열의 복사본을 만든 뒤, 복사본에서 요소를 하나씩 꺼내(pop()) 새로운 배열 끝에 추가하면 자연스럽게 역순 배열이 완성됩니다.
const arr = [7, 2, 3, 4, 5, 7, 8, 12, -12, 43, 6];
const reverse = (arr) => {
// 원본 배열을 변경하지 않도록 복사본 생성
const duplicate = arr.slice();
const reversedArray = [];
const { length } = arr;
for (let i = 0; i < length; i++) {
// 복사본의 마지막 요소를 꺼내 새 배열에 추가
reversedArray.push(duplicate.pop());
}
return reversedArray;
};
console.log(reverse(arr));코드 동작 원리
- arr.slice(): 원본 배열을 그대로 유지하기 위해 얕은 복사본을 만듭니다. 이렇게 하면 함수 호출 후에도 원래 배열은 변하지 않습니다.
- pop(): 배열의 마지막 요소를 제거하면서 반환합니다. 첫 반복에서는
6, 두 번째 반복에서는43순서로 꺼내지므로 결과적으로 역순이 됩니다. - push(): 꺼낸 요소를 결과 배열의 끝에 차례대로 추가합니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[
6, 43, -12, 12, 8,
7, 5, 4, 3, 2,
7
]참고: 더 간단한 대안
실무에서는 [...arr].reverse()처럼 전개 연산자와 내장 reverse() 메서드를 조합하는 방법도 널리 사용됩니다. 다만 알고리즘 학습이나 코딩 테스트 준비 시에는 위와 같이 for 루프로 직접 구현하는 방식을 이해해 두는 것이 큰 도움이 됩니다.