코테 문제 풀이
[레벨 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부터 배열의 맨 끝까지 추출한다.
음수일 경우, 배열의 뒤쪽부터 셈하여 잘라낸다.