정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
5 ≤ num_list의 길이 ≤ 20
1 ≤ num_list의 원소 ≤ 9
1 ≤ n ≤ 4
num_list | n | result |
---|---|---|
[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
이부분을 나는 생각하지 못한 것 같다...
해당 문제는 어떻게 보면 간단한 문제인데
한 번 잘못 짚어 계속 한 우물만 팠던 거 같다.
여러 방법이 존재하는데 그런 생각을 못한 것 같다는 생각이 들었어다.
좀 더 다양한 방법으로 접근할 수 있게 사고 방식을 바꿀 수 있도록
노력해 보자!