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

JavaScript로 공백으로 구분된 숫자 문자열에서 유일한 짝수 또는 유일한 홀수 찾기

문제 개요

공백으로 구분된 숫자들이 담긴 문자열을 입력받아, 나머지 숫자들과 홀짝 성질이 다른 단 하나의 숫자를 찾아 반환하는 JavaScript 함수를 작성해야 합니다.

입력 문자열은 항상 다음 두 가지 경우 중 하나입니다.

  • 모든 숫자가 홀수이고, 짝수가 딱 하나만 포함된 경우
  • 모든 숫자가 짝수이고, 홀수가 딱 하나만 포함된 경우

함수는 이렇게 혼자만 성질이 다른 숫자를 찾아 반환하면 됩니다.

예제 코드

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

const str = '2 4 7 8 10';
const findDifferent = (str = '') => {
    const odds = [];
    const evens = [];
    const arr = str
    .split(' ')
    .map(Number);
    arr.forEach(num => {
        if(num % 2 === 0){
            evens.push(num);
        }else{
            odds.push(num);
        };
    });
    return odds.length === 1 ? odds[0] : evens[0];
};
console.log(findDifferent(str));

실행 결과

코드를 실행하면 콘솔에 아래와 같은 결과가 출력됩니다.

7

코드 동작 원리

위 코드의 동작 과정을 단계별로 살펴보면 다음과 같습니다.

  1. 문자열 분리: split(' ')을 사용해 문자열을 공백을 기준으로 잘라 배열로 만듭니다. '2 4 7 8 10'['2', '4', '7', '8', '10']이 됩니다.
  2. 숫자 변환: map(Number)를 통해 각 문자열 요소를 숫자 타입으로 변환합니다.
  3. 홀짝 분류: forEach로 배열을 순회하면서 num % 2 === 0 조건으로 짝수는 evens 배열에, 그 외의 홀수는 odds 배열에 각각 저장합니다.
  4. 결과 반환: odds.length === 1이라면 홀수가 유일한 경우이므로 odds[0]을, 그렇지 않다면 짝수가 유일한 경우이므로 evens[0]을 삼항 연산자로 반환합니다.

예제 입력 '2 4 7 8 10'의 경우 짝수는 2, 4, 8, 10 네 개이고 홀수는 7 하나뿐이므로, 함수는 7을 정확히 반환합니다.

마무리

이 풀이법은 시간 복잡도 O(n)으로 문자열을 한 번만 순회하기 때문에 효율적이며, 로직이 단순하고 직관적이라 초보자도 쉽게 이해할 수 있습니다. 실무에서도 데이터 정제나 이상값(outlier) 탐색 같은 상황에 응용할 수 있는 유용한 패턴입니다.