JavaScript/알고리즘

프로그래머스 n개 간격의 원소들 JS (for문, push() / _(언더스코어) 사용하지 않는 매개변수나타냄 )

hihiha2 2023. 6. 6. 09:27
반응형

프로그래머스 n개 간격의 원소들 JS 

 

문제 설명

정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

 

 

 

 

 

✅ 내 코드

function solution(num_list, n) {
    let list =[]
    for(let i=0; i<num_list.length; i +=n){
        list.push(num_list[i])
    }
    return list
}

우선 문제를 보고 배열의 인덱스를 이용해서 풀어야겠다고 생각했다.

인덱스는 n의 값을 기준으로 특정한 간격을 유지하는데, 이것을 이용하는 방법은 크게 2가지인것 같다.

n=2이면 1️⃣ 인덱스의 n을 2씩 더하는방법과 2️⃣ 인덱스를 2로 나눠서 0이 되는지를 확인하는 방법이다.

 

 

나는 인덱스를 n씩 더하는 방법을 이용해서 문제를 풀었다.

일단 빈배열 list를 선언하고, for문을 통해서 인덱스의 범위를 지정하였다. 여기까지는 평소에 for문을 돌리는 방법과 같지만 i++과 같이 i를 1씩 더하는 방법이 아닌,  i +=n 을 통해서 for문을 한번 돌때마다 n씩을 더해주게 했다.

 

for문의 안에서는 push()를 통해서 배열의 i번째 값들을 list에 추가시켰다.

 

for문을 다 돈 다음에는 for문을 빠져나와서 list를 return한다.

 

 

아래의 코드는 for문을 이용해서 풀었지만, 2️⃣ 인덱스를 2로 나눠서 0이 되는지를 확인하는 방법을 사용해서 푼것이다. 

이때는 i를 평범하게 1씩 증가시킨다.

function solution(num_list, n) {
    let result = [];

    for(let i = 0; i < num_list.length; i++) {
        if(i%n == 0) {
            result.push(num_list[i]);
        }
    }

    return result;
}

 

 

 

 

💻  다른사람 코드중에 배울 것

function solution(num_list, n) {
  return num_list.filter((_, index) => index % n === 0);
}

 

이 코드의 2️⃣ 인덱스를 2로 나눠서 0이 되는지를 확인하는 방법을 사용했다. 그러면서 for문 대신 filter를 이용해서 필요한 값만을 뽑아냈다. filter()의 인덱스만을 이용해도 되기 때문에, 첫번째 인자로  _ (언더스코어)를 사용했다. 해당 매개변수를 사용하지 않을때는 언더스코어를 사용한다는 것을 처음봐서 공부하였다. 

index를 n으로 나눠서 그 값이 0인것만 filter를 통해서 남기고 바로 리턴한다. 

 

위의 코드를 조금 더 간단하게 나타낸 코드도 있었다.

const solution = (num_list, n) => num_list.filter((_, i) => !(i % n))

% 나머지 연산자를 사용하여 n으로 나눈 값이 나머지가 있다면 (=n으로나눈 나머지가 0이 아니라면)

!연산자를 통해서 걸러준다. 그러면 n으로 나눈 나머지가 0인 값만 남을 것이다.

 

 

 

 

 

💻 학습한것

_ (언더스코어) : 사용되지 않는 매개변수 이름을 관례적으로 나타냄

해당 매개변수를 사용하지 않고자 할 때 _를 사용하여 "무시"한다는 의미를 표현

filter(_, i)
  • _는 무시할 값이라는 의미이며, i는 인덱스를 나타냄
  • (해당 배열 요소의 값은 사용되지 않고 인덱스만 활용하고 싶은경우)
  • 이렇게 _를 사용하여 무시할 값을 나타내는 경우, 코드의 가독성을 높일 수 있고 필요하지 않은 매개변수 사용을 방지

 

 

🙋‍♀️ 내 생각

인덱스의 값이 특정한 패턴으로 증가할때 +를 이용할수도, n의 배수인지를 검사할수도 있다.

또한 n의 배수인지를 검사하는 방법n으로 나눴을때 나머지가 0인지, 아니면 n으로 나눈 나머지가 있는지를 Boolean값으로 받는방법이 있다. 

같은 문제도 여러가지 방향으로 생각해보는 것이 좋을것같다. 방법은 워낙 여러가지니까 🤔

 

 

 

 

반응형