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

JavaScript로 배열의 정수 부호 반전하기

문제 소개

정수 배열(양수와 음수가 섞여 있음)을 입력받아, 모든 양수는 음수로, 모든 음수는 양수로 변환한 새로운 배열을 반환하는 JavaScript 함수를 작성해야 합니다.

예를 들어 [5, -4]가 입력되면 [-5, 4]를 반환해야 합니다. 0은 부호가 없으므로 그대로 유지됩니다.

예제 코드

다음은 위 문제를 해결하는 코드입니다 −

const arr = [5, 67, -4, 3, -45, -23, 67, 0];
const invertSigns = (arr = []) => {
   const res = [];
   for(let i = 0; i < arr.length; i++){
      const el = arr[i];
      if(+el && el !== 0){
         const inverted = el * -1;
         res.push(inverted);
      }else{
         res.push(el);
      };
   };
   return res;
};
console.log(invertSigns(arr));

출력 결과

[ -5, -67, 4, -3, 45, 23, -67, 0 ]

코드 설명

이 코드의 동작 방식은 다음과 같습니다 −

1단계: 결과를 담을 빈 배열 res를 생성합니다.
2단계: for 루프를 사용하여 원본 배열의 각 요소를 순회합니다.
3단계: 조건문 +el && el !== 0으로 해당 요소가 유효한 숫자이면서 0이 아닌지 확인합니다.
4단계: 조건을 만족하면 -1을 곱해 부호를 반전한 후 결과 배열에 추가하고, 그렇지 않으면(즉 0인 경우) 원래 값을 그대로 추가합니다.

모든 요소를 처리한 후 최종 결과 배열을 반환합니다.

더 간결한 방법: map() 활용

사실 이 문제는 Array.prototype.map() 메서드를 사용하면 훨씬 간결하게 해결할 수 있습니다. 부호 반전은 단순히 -1을 곱하는 것이므로, 별도의 조건 분기 없이 다음과 같이 작성할 수 있습니다 −

const invertSigns = (arr = []) => arr.map(el => el * -1);

console.log(invertSigns([5, 67, -4, 3, -45, -23, 67, 0]));

0에 -1을 곱해도 여전히 0이므로, 특별한 예외 처리 없이도 모든 경우를 올바르게 처리할 수 있습니다. 또한 map()은 원본 배열을 변경하지 않고 새로운 배열을 반환하므로, 불변성(immutability)을 지키는 함수형 프로그래밍 스타일에도 잘 맞습니다.

마무리

배열의 부호를 반전하는 것은 실무에서 좌표 변환이나 데이터 정규화 등 다양한 상황에서 활용될 수 있는 기본적인 연산입니다. 간단한 곱셈 하나로 해결되는 만큼, 상황에 맞게 for 루프나 map() 메서드를 적절히 선택하여 사용하시기 바랍니다.