문제를 보면,
정수가 담긴 배열 numbers와 문자열 direction이 매개변수로 주어진다.
numbers 배열을 direction 방향으로 한 칸씩 회전시킨 배열을 반환해야한다.
방향은 "right", "left"이고,
numbers 배열이 [1, 2, 3] 이고, direction이 right이면
numbers 배열의 제일 우측에 있는 3이 우측으로 회전해서 [3, 1, 2]가 되어야한다.
function solution(numbers, direction) {
const A = []
let B = []
for (let i = 0; i < numbers.length; i++) {
if (direction === 'right') {
A.push(numbers.splice(-1))
B.push(numbers.splice(i))
} else {
A.push(numbers.splice(1))
B.push(numbers.splice(i))
}
}
return A.concat(B).flat()
}
더 나은 방법도 있겠지만 나는 원초적인 남자..
원초적으로 풀었다.
먼저 numbers에서 방향에 따라 splice로 잘라내어 반환 될 빈 배열을 A로 선언하고,
나머지 numbers 배열을 담을 빈 배열을 B로 선언했다.
그리고 for문을 사용해서
방향이 right 일 때, splice메서드를 이용해서 배열의 제일 끝 부분의 인덱스를 제거하고,
제거한 인덱스를 빈 배열 A에 push해준다.
( splice(-1)을 하면 배열의 제일 끝 부분을 제거한다. )
그리고 남은 인덱스들을 빈 배열 B에 push를 한다.
만약 direction이 right가 아니라면
numbers배열에서 splice메서드를 이용해서 인덱스 1부터 끝까지 제거하고,
제거한 인덱스들을 A라고 선언한 빈 배열에 push한다.
( splice(n)을 하면 배열의 인덱스n부터 끝까지 제거한다. )
남은 인덱스는 B에 push한다.
결과값으로 concat메서드를 이용해서 A배열과 B배열을 합쳐서 반환한다.
댓글