본문 바로가기

Coding Test/Programmers

[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 31 - 짝수는 싫어요)

728x90

 

# 문제 

정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.



# 답안

// 1. 입력: n -> 정수 5 같은거
// 2. 출력: n 이하의 홀수가 오름차순으로 담긴 배열 -> [1,3,5] 같은거

// 방법1) for 반복문 사용
function solution(n) {
    const arr = []
    for(let i = 1; i <= n; i++){
        if(i % 2 !== 0){
            answer.push(i)
        }
    }
    return arr;
}
}


// 방법2) 위의 코드 줄이기 
function solution(n) {
    const answer = [];
    for (let i = 1; i <= n; i+=2) answer.push(i)
    return answer;
}



# 인사이트 


// 1. 반복문의 본문이 하나의 문(statement)일 때는 중괄호({})로 감싸지 않아도 된다
// 즉, 단일 문(statement)으로 이루어진 경우에는 중괄호를 생략할 수 있다.
// 이렇게 하나의 문으로 이루어진 경우에는 중괄호를 생략하는 것이 일반적으로 더 간결하고 코드를 읽기 쉽게 만들 수 있다.


// 2. 홀수를 나타낼 때는, i % 2 === 1 보다는 i % 2 !== 0 이 더 일반화된 표현이다.
// i를 2로 나눈 나머지가 0이 아닌 경우를 찾는 것이므로 홀수를 찾는 것이라고 명확하게 이해가 가능하다. 

// i % 2 === 0이면 i는 짝수이고, 
// i % 2 !== 0이면 i는 홀수이다.

 

< 2번째 방법이 더 나은 이유 >

두 함수는 모두 주어진 수 n까지의 홀수를 배열에 담아 반환하는 함수이다.
두 코드 모두 올바르게 작성되어 있지만, 두 번째 함수가 더 간결하고 직관적이다.

여기서 두 번째 함수의 장점은 다음과 같다.

1. 간결성
두 번째 함수는 for 반복문의 조건을 i += 2로 설정하여 짝수를 건너뛰며 홀수만 추가하고 있다.
이는 더 간결한 코드로 홀수를 처리하는 방법이다.

2. 직관성
두 번째 함수에서는 for 반복문의 조건만 보아도 홀수를 추가하는 것임을 쉽게 이해할 수 있다.
i += 2로 인해 짝수를 건너뛰고 홀수만 추가하는 코드로 명확하다.

3. 성능
두 번째 함수에서는 for 반복문이 한 번의 반복으로 홀수를 추가하고 있다.
반면 첫 번째 함수에서는 for 반복문이 모든 홀수와 짝수를 반복하며, 조건문을 사용하여 홀수만 추가하고 있다.
따라서 두 번째 함수가 더 효율적인 성능을 가질 수 있다.

 

728x90