코딩테스트

[코딩테스트] 특정 수 이하의 홀수 배열만 반환

이경욱 2023. 11. 6. 10:45

문제

정수 n이 매개변수로 주어질 때,

n 이하의 홀수가 오름차순으로 담긴 배열을 

return 하도록 solution 함수를 완성해주세요.

 

 

 

해결

const n = 10;

function solution (n) {
    const answer = [];
    for (let i=0; i <= n; i++) {
        if (i % 2 === 1) {
            answer.push(i)
        }
    }
    return answer;
}

console.log(solution(n));

 

10의 숫자까지 같거나 작으면

조건문 내부에서

몫이 1로 떨어지는지 계산하게 된다.

 

3, 5, 7 등 홀수는

2로 나누게되면 모두 1이 나오기 때문에

answer 변수에 push하도록 설정했다.

 

 

 

다른 여러 풀이

function solution2(n) {
    var answer = [];
    for (let i = 1; i<=n; i+=2) answer.push(i)
    return answer;
}

 

단순하게 +2를 하면 되는거였다..

이 코드를 보고 머리가 띵했다.

 

const solution3 = (n) => 
    Array
        .from({ length: n }, (_, i) => i + 1)
        .filter(i => i % 2 !== 0)

 

Array .from은 문자열 등

유사배열 객체나 이터러블 객체를

배열로 만들어주는 메서드이다.

(ex. {0 : "apple", 1 : "banana"} => ["apple", "banana"])

 

첫번째 인자로 {length: n} 을 넣어주는 건

배열로 만들 이터러블한 객체가 되는 것이다.

 

두 번째 인자로

value (undefined) 와 index 가 들어가서

index만 반환하는 함수를 넣어주면

length n 만큼의 해당하는 인덱스 값이

배열로 출력된다.

 

array.map() 과

비슷하다고 생각하면 편하다.

 

인덱스 값에 + 1 을 하여

1부터 시작되는 배열을 만들고

filter를 통해

2로 나누었을 때

몫이 0으로 떨어지지 않는 값만

return하도록 코드를 작성한 것으로 보인다. 

 

function solutio4(n) {
    return Array(n).fill(1).map((v,i)=>v+i).filter(v=>v%2===1);
}

 

이 함수도 위 array.from과

비슷하게 작성된 것처럼 보인다.

 

먼저 n의 인덱스 길이만큼 fill메서드르 1을 채워준 뒤,

map 함수를 활용해 1 + i 를 하면

인덱스 길이만큼 1부터 배열이 반환된다.

 

후에 filter로 위와 같이

홀수 값만 반환하게 하였다.