알고리즘 문제를 오랜만에 풀었기 때문에 기초부터 다시 시작했다.
⛓️ n개 간격의 원소들
정수 리스트 num_list
와 정수 n
이 주어질 때, num_list
의 첫 번째 원소부터 마지막 원소까지 n
개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
5 ≤ num_list
의 길이 ≤ 20
1 ≤ num_list
의 원소 ≤ 9
1 ≤ n
≤ 4
function solution(num_list, n) {
let answer = [];
for (let i=0; i<num_list.length; i+=n) {
answer.push(num_list[i])
}
return answer;
}
for 반복문으로 접근하였는데 평소에는 i++
을 주로 사용했었다. 그런데 하나씩 더해주지 않고 정도 n을 더해주는 식으로 접근해서 풀었다.
const solution = (num_list, n) => num_list.filter((_, i) => !(i % n))
filter메서드의 콜백함수에서 배열의 요소는 사용하지 않고 그 요소의 인덱스만 받아서 논리부정연산자로 풀었다...
num_list 배열에서 인덱스가 n의 배수인 요소들만 걸러내서 새로운 배열로 반환하는 것이다.
⛓️ 순서바꾸기
정수 리스트 num_list
와 정수 n
이 주어질 때, num_list
를 n
번째 원소 이후의 원소들과 n
번째까지의 원소들로 나눠 n
번째 원소 이후의 원소들을 n
번째까지의 원소들 앞에 붙인 리스트를 return하도록 solution 함수를 완성해주세요.
2 ≤ num_list
의 길이 ≤ 30
1 ≤ num_list
의 원소 ≤ 9
1 ≤ n
≤ num_list
의 길이
function solution(num_list, n) {
const front = num_list.slice(n,num_list.length)
const back = num_list.slice(0,n)
return [...front,...back];
}
slice()
와 스프레드 연산자를 사용하여 풀어보았다.
for, if문 위주로 풀어오다가 잘라내기로 접근하려니 머리를 좀 짜냈다...
function solution(num_list, n) {
return [...num_list.slice(n), ...num_list.slice(0, n)]
}
이렇게 심플할수가;