코테 문제 풀이

[레벨 0] 짝수 홀수 개수 (모범답안 + 재귀함수 괴답안 with slice)

2DC 2022. 12. 6. 16:46

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/120824

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

답안

function solution(num_list) {
    var answer = [0, 0]
    for (ele of num_list) {
        if(ele % 2 === 0) answer[0] += 1
        else answer[1] += 1
    }
    return answer
}
  • 인수로 받은 배열을 순회하며, 엘리먼트가 만약 짝수라면 정답 배열의 0번째 인덱스에 +1을,
    아니라면 1번째 인덱스에 +1을 한다.
  • 끝.

 


 

괴답안(재귀함수 풀이)

function solution(num_list, 짝수 = 0, 홀수 = 0) {
    if (num_list.length === 0) return [짝수, 홀수]
    if (num_list[0] % 2 === 0) return solution(num_list.slice(1), 짝수 + 1, 홀수)
    if (num_list[0] % 2 !== 0) return solution(num_list.slice(1), 짝수, 홀수 + 1)
}
  • 한창 독학할때 for문을 쓸 줄 몰라서 모든 문제를 재귀함수로 풀었다.
  • 그 때 풀었던 답안인데 왜 이렇게 했는지 참 모르겠다.
  • 이 문제풀이방법에서는 slice 메서드를 공부할 수 있겠다.

 


 

Array.prototype.slice( [begin[, end]] )

  • 어떤 배열의 begin 부터 end까지  (end 자체는 미포함한다. 즉, end - 1까지)
  • 기존 배열에 대한 얕은 복사본을 새로운 객체 배열로 반환하는 메서드이다.
arr.slice([begin[, end]])

alice는 2개의 인자를 선택적으로 받을 수 있다.

  • begin : slice할 시작점을 정한다. undefined일 경우 0번 인덱스부터 slice한다. (즉 변함이 없을 것이다.)
    begin이 배열의 길이보다 긴 경우에는 빈 배열을 반환한다.
  • end : 추출을 종료할 기준 인덱스이다. begin부터 end -1 까지 추출한다.
    end가 배열의 길이보다 길다면 begin부터 배열의 맨 끝까지 추출한다.
    음수일 경우, 배열의 뒤쪽부터 셈하여 잘라낸다.