[프로그래머스-기초]n개 간격의 원소들

JiEun·2023년 6월 1일
0

n개 간격의 원소들

문제 설명

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

제한사항

5 ≤ num_list의 길이 ≤ 20
1 ≤ num_list의 원소 ≤ 9
1 ≤ n ≤ 4

입출력 예

num_listnresult
[4, 2, 6, 1, 7, 6]2[4, 6, 7]
[4, 2, 6, 1, 7, 6]4[4, 7]

입출력 예 설명

입출력 예 #1
[4, 2, 6, 1, 7, 6]에서 2개 간격으로 저장되어 있는 원소들은 [4, 6, 7]입니다.
입출력 예 #2
[4, 2, 6, 1, 7, 6]에서 4개 간격으로 저장되어 있는 원소들은 [4, 7]입니다.

💻 내가 작성한 코드

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
}

빈배열 result를 선언하고 for문을 이용해 num_list를 순회하면서
만약 인덱스 값이 n으로 나눴을 때 0으로 떨어지면 result에 값을 push했다.

🛠️ 리팩토링 하기

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

map보다는 filter가 더 잘 맞을 거 같아 진행해 보았다.
요소는 사용하지 않아서 _으로 처리했다.

🤔 헤맸던 부분

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

처음 생각 했던 방법은 n에서 2배 증가시켜 인덱스 값이 맞는지 확인하면 되겠다 생각했다.

코드 실행했을 때는 잘 진행되었는데 제출하려고 하니 30점만 맞았다ㅠ
그러다 다른 분의 코드를 봤는데 인덱스 값에서 n을 나눴을 때 0인 경우로 조건을하셨다.
그 때 아차 싶었다...

한 번 고민하니 다른 방법을 생각하는데 막혀 버린거 같다..ㅠ

💻 다른 사람이 작성한 코드

const solution = (num_list, n) => num_list.filter((_, i) => !(i % n))
function solution(num_list, n) {
    return num_list.filter((v, idx) => !(idx % n));
}

나와 동일하게 filter를 이용했지만 작성한 부분을 !(idx % n) 이런식으로 표현하셨다.

function solution(num_list, n) {
    var answer = [];

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

    return answer;
}

가장 기본적인 for문인데 i+=n 이부분을 나는 생각하지 못한 것 같다...


✏️ 마치며

해당 문제는 어떻게 보면 간단한 문제인데
한 번 잘못 짚어 계속 한 우물만 팠던 거 같다.

여러 방법이 존재하는데 그런 생각을 못한 것 같다는 생각이 들었어다.

좀 더 다양한 방법으로 접근할 수 있게 사고 방식을 바꿀 수 있도록
노력해 보자!

profile
💻 프론트엔드를 목표로 성장 중! (알아봤던 내용 등을 정리하기)

0개의 댓글