문제 설명
정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.
내가 자주 쓰는 방법으로, 막힘 없이 이 문제를 풀어내겠다는 생각으로 작성하였다. 그래서 다른 사람들의 코드와는 다르게 길지만 그래도 읽었을 때 무엇을 풀고자 하는지 잘 알 수 있다고 생각한다. 하지만... 그래도 가독성 높게, 짧게 작성할 수 있는 코드라면 짧게 작성하도록 노력해야겠다고 생각한 오늘의 문제였다.
function solution(num_list) {
// 객체 만들기
const obj = { 'even': 0, 'odd': 0}
// 배열 순회하면서 객체에 넣기
// 짝수인 경우에는 key가 odd로
// 홀수인 경우에는 key가 even으로
for (let i = 0; i < num_list.length; i++) {
if (num_list[i] % 2 === 1) {
obj['odd'] += 1
} else {
obj['even'] += 1
}
}
return [obj['even'], obj['odd']]
}
// 다른 사람의 풀이 1
function solution(num_list) {
var answer = [0,0];
for(let a of num_list){
answer[a % 2] += 1
}
return answer;
}
// 다른 사람의 풀이 2
function solution(num_list) {
const evenLength = num_list.filter(n => n % 2 === 0).length;
return [evenLength, num_list.length - evenLength];
}
좋아요가 8개나 있었던 풀이 1번.
처음 이 코드를 읽었을 땐 for...of
메서드에 내가 익숙하지 않아서 이게 무슨 말인지... 하며 약 2분 가량 생각했다. 그러다 이 코드를 이해하게 된 순간 정말 이렇게도 코드를 쓸 수 있구나 하며 감탄했다. 나도 이렇게 알고리즘 문제를 풀 수 있도록 여러 문제를 접해야겠다고 생각했다.
풀이 2번은 filter()
메서드를 사용하였다. 함수의 테스트를 통과하는 배열을 모아서 새로운 배열을 만드는 메서드로 이 코드에서는 짝수의 길이를 구하기 위해 filter()
를 사용한 후 .length
를 사용하였다. 이 방법은 내가 생각할 수 있었던 방법이라 직접 코드를 작성해보며 손에 익고 머리에 익을 수 있도록 복습했다.