[TID][Lv 0] 코딩 테스트 연습_4

MoonEn·2022년 12월 28일
0

Today I Learned

목록 보기
5/8

해당 스토리는 코드테스트 공부 중에 새롭게 배운 내용을 기록하고 자기 반성을 위해 기록해 둔다.

짝수는 싫어요.

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

문제 풀이

정수 n이하의 홀수만 찾기 위해서는 1부터 2씩 더하고, n이 넘어가면 2씩 더하는 것을 끝내면 된다.

이것을 간단하게 할 수 있는 방법이 무엇이 있을까?

바로 반복문이다!

나의 코드

기본적으로 for 반복문을 쓸 때, 1씩 증가하는 변수를 사용한다. 예를 들면,

for(let i = 0; i<10; i++){
	반복할 내용
}

i++이 부분이 1씩 증가하게 만드는 부분이다. 그렇다면 2씩 증가하게 만드려면 어떻게 해야할까?

for(let i = 0; i<10; i+=2){
	반복할 내용
}

간단하다. i에 2씩 더해주기만 하면 된다. 그리고 추가로 고려해야할 부분은 무엇일까? 바로 시작하는 값과 끝나는 값이다. 시작하는 값은 let i = 0이 부분에서 정의되며, 홀수의 시작 값인 1이 지정되어야 한다. 그래서 let i = 1이렇게 작성하면 된다.

끝나는 값은 i<10이 부분이다. n이하의 값이 범위이기 때문에, 끝나는 값은 n보다 작아야 한다. 그렇다면 i<=nn이하로 작성하면 된다.(n값이 홀수이면 그 자신을 포함하기 때문)

정말 마지막으로 배열을 만들어서 이 i값을 넣어주기만 하면 된다. 자, 그럼 코드를 작성해보자!

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

짠! 정답이다.

추가

간단한 문제를 이렇게 블로그로 써서 올리는 이유는 역시 추가로 알게된 것이 있기 때문이다. 다른 사람들의 코드를 보니, Array.fromfilter를 조합을 사용하는 사람이 있었다. filter를 사용하는 방법은 알지만, Array.from에 대해서는 잘 몰랐기 때문에 이에 대해서 조금 알아보려고 한다.

Array.from

다른 사람이 남긴 정답은 아래와 같다.

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

MDN에서 문서 어떤 메서드인지 알아보자.

Array.from() 메서드는 유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운Array 객체를 만듭니다. 출처-MDN 문서

읽어보니 새로운 Array를 만드는 것 같다. {length: n }은 배열의 길이를 나타내는 것이고, 그 뒤의 화살표 함수는 (_, i) => i + 1는 배열의 모든 요소에 대해 호출할 맵핑 함수(출처: MDN)이다. 맵핑 함수는 첫 번째 파라미터로 배열의 요소를 전달 받고, 두 번째 파라미터로 요소들의 Index 값을 전달 받는다.
위의 Array.from({ lenght: n }, (_, i) => i + 1)을 해석해 보자. 길이가 n인 배열을 만드는데, 맵핑 함수를 통해 그 값은 Index+1이 된다.

n=5 라면, [1,2,3,4,5]라는 배열이 만들어지게 된다.
([0+1, 1+1, 2+1, 3+1, 4+1])

돌아와서

그렇다면 결국 자연수 n이하의 배열을 만들고, filter를 통해서 2로 나누어지지 않는 배열를 반환한 것이 다른 사람이 만든 코드인 것이다!

마무리

역시 다양한 방법이 있다. 초보자인 내가 이렇게 하나하나 알아가는 것은 참으로 재미있는 것 같다. 뭔가 수학 문제 풀듯이 푸는 것에 재미를 느끼다니, 다시 수능 쳐서 대학을 가야하나 하는 생각도 들게 만든다.(옛날에 수능 쳤을 때보다 더 점수가 떨어지겠지...)
그럼 나는 또 공부하러 가본다.

정말 마지막으로

함수의 파라미터로 언더바()가 들어가 있다. 이건 도대체 무슨 의미일까.. 찾아보니 JavaScript에서는 개발자의 관습이라고 한다.
1. 파라미터 이름을 언더바(
)로 선언하면 해당 파라미터가 중요하지 않다는 것을 나타냄.
2. 화살표 함수 파라미터 이름을 언더바(_)로 선언하는 경우 코드를 더 짧게 하려고 사용함.
구글링해서 찾아본 정보라 정확하지 않을 수 있다. 혹시나 잘 아시는 분은 댓글 부탁드린다!

profile
개발자를 꿈꾸는 직장인

0개의 댓글