본문 바로가기
개발/개발 공부

[프로그래머스] 코딩테스트 입문 : 짝수 홀수 개수

by 하모예 2024. 9. 4.

| 문제

정수가 담긴 리스트 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}

| 풀이 1

직관적으로 num_list안에 있는 숫자 정보를 하나씩 꺼내와서

해당 숫자가 홀수인지 짝수인지 확인한 다음

짝수이면 결과가 남기는 배열 answer의 0번 인덱스를 하나씩 키워주고,

홀수이면 1번 인덱스의 값을 하나씩 키워줬습니다.

public int[] solution01(int[] num_list) {
    int[] answer = new int[2];
    for(int num : num_list){
        if(num % 2 == 0) answer[0]++;
        else answer[1]++; 
    }
    return answer;
}

| 풀이 2

풀이 1 방식으로 문제를 풀다가 발견한 규칙이 있었습니다.

2로 나눴을 때 나머지가 0이면 짝수라고 판단하는데

마침 결과를 담는 배열의 0번 인덱스에 짝수의 개수를 담아라고 되어 있더라고요.

그래서 짝수, 홀수 여부를 판단하는 로직을 인덱스 그 자체로 사용해 보았습니다.

public int[] solution02(int[] num_list) {
    int[] answer = new int[2];
    for(int i = 0 ; i < num_list.length ;i++){
        answer[num_list[i] % 2]++;
    }
    return answer;
}

| 해설

대부분 프로그래머스에서 코딩 테스트 입문을 풀어보는 분들은 아시겠지만

많은 분들이 풀이 2처럼 뭔가 있어 보이는 코드를 선호하십니다.

그러나 풀이 1이 풀이 2보다 훨씬 단순하고 직관적이기 때문에 소프트웨어 개발 규칙(KISS)에도 부합하고요.

1. KISS(Keep It Simple Stupid!) : 단순하고 이해하기 쉽게 써라
2. YAGNI(You Ain't Gonna Need It) : 불필요한 코드를 반복하지 마라
3. DRY(Do not Repeat Yourself) : 반복하지 마라

더불어서 실제 코드를 실행하며 소요 시간을 살펴보면 풀이 1이 풀이 2보다 2배 정도 빠른 편입니다.

물론 0.02초와 0.01초의 차이긴 하지만요ㅎㅎ

코드는 그럴싸해 보이는 코드보다 단순하고 멍청해 보이는 코드가 더 좋은 코드라는 것입니다.

알아보기 어렵다고 해서, 스트림을 썼다고 해서 절대 좋은 코드가 아닙니다.

남들이 보기에 멋져 보이는 코드를 쓸 필요 없어요.

우리가 코드를 무엇을 위해 쓰는지, 본질에 집중합시다.

댓글