문제
정수 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로 위와 같이
홀수 값만 반환하게 하였다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 두 정수 사이의 합 (1) | 2023.12.04 |
---|---|
[코딩테스트] 콜라츠 추측 (0) | 2023.11.30 |
[코딩테스트] 하샤드 수 (1) | 2023.11.24 |
[프로그래머스 코딩테스트] 자연수 뒤집어 배열로 만들기 (0) | 2023.11.17 |
[코딩테스트] 최빈값 구하기 (1) | 2023.11.03 |