숫자로 이루어진 배열과 하나의 숫자(예: n, 반드시 배열의 길이보다 작거나 같아야 함)를 인수로 받는 자바스크립트 함수를 작성해야 합니다. 이 함수는 배열의 앞쪽에서 k번째 요소와 뒤쪽에서 k번째 요소를 서로 맞바꾸는 역할을 수행합니다.
예제
다음은 해당 기능을 구현한 코드입니다 −
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const swapNth = (arr, k) => {
const { length: l } = arr;
const ind = k - 1;
let temp = arr[ind];
arr[ind] = arr[l - k];
arr[l - k] = temp;
};
swapNth(arr, 4);
console.log(arr);
swapNth(arr, 8);
console.log(arr);
출력
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다 −
[
0, 1, 2, 6, 4,
5, 3, 7, 8, 9
]
[
0, 1, 7, 6, 4,
5, 3, 2, 8, 9
]
동작 원리
함수의 동작 과정을 단계별로 살펴보면 다음과 같습니다.
1. 배열 길이 확인: 구조 분해 할당을 통해 배열의 전체 길이를 변수 l에 저장합니다.
2. 인덱스 계산: 앞쪽에서 k번째 요소의 인덱스는 k - 1이고, 뒤쪽에서 k번째 요소의 인덱스는 length - k입니다.
3. 값 교환: 임시 변수(temp)를 활용해 두 위치의 값을 안전하게 서로 맞바꿉니다.
예를 들어, 배열 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]에서 k가 4일 경우 앞쪽 네 번째 요소인 3과 뒤쪽 네 번째 요소인 6이 서로 교환되어 [0, 1, 2, 6, 4, 5, 3, 7, 8, 9]가 됩니다. 이후 k가 8로 호출되면 앞쪽 여덟 번째 요소인 7과 뒤쪽 여덟 번째 요소인 2가 교환됩니다.
이 방식은 시간 복잡도 O(1)로 두 요소만 직접 교환하므로 매우 효율적이며, 원본 배열을 그대로 수정(in-place)한다는 특징이 있습니다.