Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 배열에서 음수 값 제거하기 – pop() 메서드만 활용하는 방법

여러 개의 값을 담고 있는 배열 arr가 주어져 있다고 가정해 보겠습니다. 예를 들어 다음과 같습니다.

[-3, 5, 1, 3, 2, 10]

우리는 이 배열에서 음수 값을 모두 제거하는 함수를 작성해야 합니다. 함수의 실행이 완료된 후에는 배열에 양수만 남아 있어야 합니다.

여기에는 두 가지 중요한 조건이 있습니다. 첫째, 임시 배열을 새로 생성하면 안 되며, 둘째, 배열에서 값을 제거할 때는 오직 pop() 메서드만 사용해야 한다는 점입니다.

그럼 이 요구 사항을 만족하는 함수의 코드를 살펴보겠습니다.

예제 코드

// 배열 끝에 있는 음수들을 먼저 제거
while (x.length && x[x.length - 1] < 0) {
   x.pop();
}
for (var i = x.length - 1; i >= 0; i--) {
   if (x[i] < 0) {
      // 해당 요소를 마지막 요소(양수임이 보장됨)로 교체한 후 제거
      x[i] = x[x.length - 1];
      x.pop();
   }
}

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

[ 1, 8, 9 ]

동작 원리

이 알고리즘은 두 단계로 나누어 동작합니다.

1단계: 먼저 while 반복문을 사용해 배열 끝에 연속해서 위치한 음수들을 모두 제거합니다. 이 과정을 거치면 배열의 마지막 요소는 반드시 양수가 됩니다.

2단계: 이후 배열의 끝에서부터 앞쪽으로 순회하면서 음수를 발견하면, 그 자리를 배열의 마지막 요소(양수임이 보장된 상태)로 덮어쓴 뒤 pop()으로 마지막 요소를 제거합니다. 뒤에서 앞으로 순회하기 때문에 이미 처리가 끝난 인덱스에 영향을 주지 않으며, 교체된 값 역시 항상 양수이므로 안전합니다.

이 방식은 추가 배열을 만들지 않고 기존 배열 내부에서만 연산이 이루어지므로 시간 복잡도는 O(n), 공간 복잡도는 O(1)로 매우 효율적입니다. 특히 대용량 데이터를 다룰 때 메모리 사용량을 최소화할 수 있다는 장점이 있습니다.