정수가 담긴 리스트 num_list
가 주어질 때, num_list
의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.
num_list
의 길이 ≤ 100num_list
의 원소 ≤ 1,000num_list | result |
---|---|
[1, 2, 3, 4, 5] | [2, 3] |
[1, 3, 5, 7] | [0, 4] |
입출력 예 #1
입출력 예 #2
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를 한번만
작성할 수 있게 변경하는 코드를 작성해보았다. */
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]);
// 위의 코드를 화살표 함수로 바꾸고 간단하게 작성해 보았다.
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문을 삼항연산자로 변경해주었다.
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