문제 설명

정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 1 ≤ num_list의 길이 ≤ 100
  • 0 ≤ num_list의 원소 ≤ 1,000

입출력 예

num_listresult
[1, 2, 3, 4, 5][2, 3]
[1, 3, 5, 7][0, 4]

입출력 예 설명

입출력 예 #1

  • [1, 2, 3, 4, 5]에는 짝수가 2, 4로 두 개, 홀수가 1, 3, 5로 세 개 있습니다.

입출력 예 #2

  • [1, 3, 5, 7]에는 짝수가 없고 홀수가 네 개 있습니다.

✍ SOLUTION1

const solution = (num_list) => [
    num_list.filter(x=>x%2===0).length, 
    num_list.filter(x=>x%2!==0).length
];

/* 내가 처음에 작성한 코드이다. filter를 이용해서 홀수짝수 나눠서 그 배열의 length를 배열에
담아주었다. filter를 두번이나 작성하고 중복코드가 있어서 좋은 코드는 아닌거 같다... */
const solution = (num_list) => {
    var arr = num_list.filter(x=>x%2==0).length;

    return [arr, num_list.length-arr];
}

/* 다른분의 풀이를 보다가 힌트를 얻고 내 코드에서 조금 더 중복을 줄여서 filter를 한번만 
작성할 수 있게 변경하는 코드를 작성해보았다. */

✍ SOLUTION2

function solution(num_list) {
    return num_list.reduce(([even, odd], curr) => {
        return [
            curr % 2 === 0? even + 1 : even,
            curr % 2  === 1? odd + 1 : odd 
        ]
    }, [0,0]);
};

/* 이건 다른분의 코드이다. filter가 아닌 reduce를 통해서 [even, odd]의 배열에 조건에 맞으면 
값을 1씩 추가하도록 작성한 코드이다. */
const solution = (num_list) => 
    num_list.reduce(([even, odd], curr) => 
         [
            curr % 2 === 0? even + 1 : even,
            curr % 2  === 1? odd+1 : odd 
        ]
    , [0,0]);

// 위의 코드를 화살표 함수로 바꾸고 간단하게 작성해 보았다.

✍ SOLUTION3

function solution(num_list) {
    var answer = [0, 0];

    for (let i = 0; i < num_list.length; i++) {
        if(num_list[i] % 2 === 0) {
            answer[0]++;
        } else {
            answer[1]++;
        }
    }

    return answer;
}

/* 이것도 다른분의 코드이다. for문을 통해서 num_list의 인덱스로 접근하여 if를 통해 조건을
만족시키면 변수 answer의 요소에 1씩 증가하도록 만들어주었다. */
const solution = (num_list) => {
	var answer = [0, 0];

	for (let i = 0; i < num_list.length; i++) {
        num_list[i] % 2 === 0?answer[0]++:answer[1]++;
    }
	return answer;
}

// 위의 코드를 화살표 함수로 만들어주고 if문을 삼항연산자로 변경해주었다.
		

✍ SOLUTION4

function solution(num_list) {
    var answer = [0,0];

    for(let a of num_list){
        answer[a%2] += 1
    }

    return answer;
}

/* 이것도 다른분의 코드인데 간단하고 인덱스를 이용해서 접근하는 방법이 신선해서 작성해본다.
a를 2로 나누면 어차피 0아니면 1만 나오니까 answer의 인덱스로 a%2를 넣어주고 1씩 증가시키게 해주었다.
 */
const solution = (num_list) => 
	var answer = [0, 0];

	for(let a of num_list) {
		answer[a%2] += 1
	}
	return answer;
}

// 위의 코드를 화살표 함수로 변경해보았다.

출처 : 프로그래머스 스쿨 | 코딩테스트 연습
https://school.programmers.co.kr/learn/courses/30/lessons/120824

0개의 댓글