문제 설명

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


제한사항

  • 1 ≤ n ≤ 100

입출력 예

nresult
10[1, 3, 5, 7, 9]
15[1, 3, 5, 7, 9, 11, 13, 15]

입출력 예 설명

입출력 #1

  • 10 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9]를 return합니다.

입출력 #1

  • 15 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9, 11, 13, 15]를 return합니다.

✍ SOLUTION1

const solution = (n) => {
    let arr = [];
    for(let i = n; i > 0; i-=1) {
        if(i % 2 === 1) {
            arr.push(i);
        }
    }
    return arr.reverse();
}

/* 내가 처음 작성한 코드이다. 
1. 빈 배열 arr을 만든다 .
2. for문을 통해 n부터 1까지 1씩 감소하며 반복문을 돌려준다. 
3. arr.push를 통해서 2로 나누었을때 나머지가 1인경우(홀수) arr에 추가하도록 해준다.
4. arr.reverse()를 통해서 순서롤 뒤집어준다.
*/

✍ SOLUTION2

const solution = (n) => {
	let arr =[];
	for(let i = 1; i <= n; i+=2) {
		arr.push(i);
	}
	return arr;
}

/* 
SOLUTON1과 비슷한 코드인데 for문 안에 2씩 더해주어 홀수만 나오게끔 작성하여 if문을 생략할 수
있도록 작성한 코드이다. 이 방법은 생각도 못했었는데 다른분의 풀이를 보다가 공부할겸 가져와봤다.
*/

✍ SOLUTION3

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

/* 
이것도 다른분의 풀이인데 신기해서 가져와봤다.

1. Array(n) n개의 요소를 갖는 Array를 만들어준다. 
2. fill(1) fill메서드를 통해서 Array의 요소를 1로 채워준다.
3. map((v, i) => v + i) 각 요소에 인덱스 값을 더하여 새로운 배열을 생성한다.
인덱스 값은 0부터 시작하므로 첫 번째 요소에는 인덱스 값인 0이 더해지고 두 번째 요소에는 
인덱스 값인 1이 더해지는 식으로 진행된다. 
따라서 위의 예시에서 생성된 배열은 [1+0=1 , 2+0=2 , ... , n-2+0=n-2 , n-2+0=n-2]와 같다.
인덱스 값인 0이 더해열은 [1+0=1 , 2+0=2 , ... , n-2+0=n-2 , n-2+0=n-2]와 같다.
4. filter(v=>v%2===1)는 홀수만 필터링하여 새로운 배열을 반환한다. 
여기서 % 연산자는 나머지를 구하는 연산자이다. v%2===1 조건은 v가 홀수일 때만 true이다. 
따라서 최종적으로 반환되는 배열은 주어진 범위 내에서 홀수만 담고 있게 된다.
*/

map 메서드 자세히 알기

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글