코딩테스트

[프로그래머스] 짝수 홀수 개수

john-lennon 2026. 4. 28. 14:49

문제 설명

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

 

제한사항

  • 1 ≤ num_list의 길이 ≤ 100
  • 0 ≤ num_list의 원소 ≤ 1,000

입출력 예

num_list result
[1, 2, 3, 4, 5] [2, 3]
[1, 3, 5, 7] [0, 4]

 


 

나의 코드

function solution(num_list) {
    
    // 1. 짝수 / 홀수 담을 배열 만들기
    const even = [];
    const odd = [];
    
    // 2. num_list 숫자 하나씩 꺼내서 짝수인지 홀수인지 구분
    for (let i = 0; i < num_list.length; i++) {
        if (num_list[i] % 2 === 0) {
            even.push(num_list[i]);
        } else {
            odd.push(num_list[i]);
        }
    }
    
    return [even.length, odd.length];
}

 

방식

  1. 짝수와 홀수를 따로 담을 배열을 만든다
  2. for 문으로 num_list를 처음부터 끝까지 하나씩 확인한다
  3. 각 숫자가 짝수인지 홀수인지 판별한다
  4. 짝수면 even, 홀수면 odd 배열에 추가한다
  5. 마지막에 각 배열의 길이(개수)를 반환한다.

 

다른 사람의 코드

function solution(num_list) {
    var answer = [0,0];

    for(let a of num_list){
        answer[a%2] += 1
    }

    return answer;
}

 

나와 차이점

내 방식 = 짝수/홀수 실제 숫자를 각각 배열에 저장

이 방식 = 숫자는 저장 안 하고, 처음부터 개수만 저장

 


 

< for (let i = 0; ...) 방식  vs for (let a of 배열) 방식 >

 

1. i 방식 (인덱스 번호 사용)

 

형태:

for (let i = 0; i < 배열.length; i++)

 

특징:

  • i = 배열의 번호(인덱스)
  • 배열[i] = 해당 위치의 실제 값

사용하기 좋은 경우:

  • 몇 번째인지 위치가 중요할 때
  • 앞/뒤 비교할 때
  • 인덱스 번호 자체가 필요할 때

 

2. of 방식 (값 직접 꺼내기)

 

형태:

for (let a of 배열)

 

특징:

  • a = 배열 안의 실제 값
  • 인덱스 번호 없이 값만 바로 사용

사용하기 좋은 경우:

  • 값 자체만 확인하면 될 때
  • 짝수/홀수 판별
  • 합계 계산
  • 출력용 반복

 

핵심

인덱스 번호(위치)가 필요하면 → i 

값 자체만 필요하면 → of

 


 

느낀점

나는 짝수와 홀수를 각각 배열에 직접 저장하는 방식으로 접근했다. 이 방식도 틀린 것은 아니지만, 문제의 실제 목적이 숫자 자체를 저장하는 것이 아니라 짝수와 홀수의 개수를 세는 것이라는 점에서 조금 더 효율적으로 생각할 필요가 있다는 걸 느꼈다. 다른 사람의 풀이를 보면서 무조건 보이는 방식대로 구현하기보다 이 문제의 진짜 목적이 무엇인지 먼저 파악하는 것이 훨씬 중요하다는 점을 배웠다. 즉, '저장'이 목적이면 배열이 필요하지만, '개수 확인'이 목적이면 카운트만 하면 된다. 이번 문제를 통해 아직은 구현 자체에 집중하다 보니, 문제의 핵심 목적보다 과정에 더 치우칠 때가 있다는 점을 느꼈고 앞으로 코드를 작성하기 전에 "이 문제에서 진짜 필요한 결과가 무엇인가?"를 먼저 생각하는 습관을 들여야겠다고 느꼈다.