[TID][Lv 0] 코딩 테스트 연습_2

MoonEn·2022년 12월 11일
0

Today I Learned

목록 보기
3/8
post-thumbnail

해당 스토리는 코드테스트 공부 중에 새롭게 배운 내용을 기록하고 자기 반성을 위해 기록해 둔다.

연습 문제 - 짝수/홀수 개수

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

제한사항
1 ≤ num_list의 길이 ≤ 100
0 ≤ num_list의 원소 ≤ 1,000

문제 풀이

짝수와 홀수... 두 가지를 나누는 방법은 쉽게 2로 나누어서 나머지가 0이면 짝수, 나머지가 1이면 홀수로 나누는 것이다. 양의 정수에서 짝수면 무조건 2로 나누어 질 것이고, 홀수면 무조건 나머지가 1이 남기 때문이다.

짝수와 홀수를 구하는 방법은 알았다. 그렇다면 주어진 배열에서 각각의 개수를 어떻게 세면 되는지가 관건이다. 배열의 메소드 중에서 filter라는 메소드가 있다. 해당 메소드는 파라미터로 전달 받은 Callback함수*에서 true로 반환되는 요소만을 다시 배열로 반환하는 메소드이다.

filter mdn 문서

이 filter라는 메소드를 가지고 코드를 짜보자!
우선 파라미터로 전달 받은 배열에 필터 메소드를 쓴다.

num_list.filter()

filter메소드의 파라미터로 전달할 함수를 생각해보자. 파라미터로 전달할 함수는 function으로 선언해도 되지만, 여기서는 간결하게 Arrow function으로 만드려고 한다.

el => el%2 ==0 //짝수
el => el%2 !=0 //홀수
(el은 그냥 element의 약자로 씀)

이 함수를 filter의 파라미터로 넣자. 그리고 배열의 개수를 구하면, 그것이 짝수와 홀수의 개수가 된다.

num_list.filter(el => el%2 == 0).length // 짝수 개수
num_list.filter(el => el%2 != 0).length //  홀수 개수

마지막으로 이것을 배열에 넣으면 된다. 이 때는 push메소드를 사용했다. push메소드는 배열의 끝에 하나 이상의 요소를 추가하고, 배열의 새로운 길이를 반환한다. 딱이다.

내가 작성한 최종 코드의 모습이다.

function solution(num_list) {
    let answer = [];
    answer.push(num_list.filter(el => el%2 == 0).length);
    answer.push(num_list.filter(el => el%2 != 0).length);
    return answer;
}

색다른 방법

앞서 문제를 풀며 꽤나 괜찮게 풀었다고 생각했다. 하지만...

와우!

function solution(num_list) {
    var answer = [0,0];
    for(let a of num_list){
        answer[a%2] += 1
    }
    return answer;
}

배열의 요소를 나눈 나머지를 배열의 index로 사용한 방법이 있었다. 내가 푼 방법이 좋은 것인지, 이 방법이 좋은 것인지 코린이인 나는 알 수는 없다. 하지만 생각지도 못한 방법이었다는 것에 놀랐다. 이런 코드들을 보면서 나의 식견도 넓어지길 바라고 있다.(좀 더 치열하게 생각하는 능력을 길러야 할지도...)

마무리

문제를 하나씩 풀어가면서 새로운 메소드도 배우고, 새로운 방식도 배우고 있다. 아직 Lv 0, 겨우 입문에 불과하지만, Lv 5도 척척 풀어내는 그런 개발자를 목표로 한 단계 한 단계 밟아 가야겠다. 오늘 테스트도 기다려랏!!


*프로그래밍에서 콜백(callback) 또는 콜백 함수(callback function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. - 출처: 위키

profile
개발자를 꿈꾸는 직장인

0개의 댓글