Description
- k 수 만큼 뒤에서 원소를 빼서 앞으로 옮기고 앞에 늘어난만큼 기존 원소들은 뒤로 가야하는 문제였다.
- 기본으로 있는 함수 splice,slice,pop,unshift등을 사용하면 금방 풀릴 것 같은 문제였지만 최대한 다양한 방법으로 풀어보고싶어서
메서드를 사용하지 않고 swap을 사용해서 구현하는 것을 목표로 도전해봤다.
Code
1. while - splice, unshift
function solution1(nums, k) {
while (k > 0) {
const tmp = nums.splice(nums.length - 1, 1);
nums.unshift(...tmp);
k--;
}
return nums
}
2. for - slice, spread
function solution2(nums, k) {
for (let i = 0; i < k; i++) {
let rest = nums.slice(0, nums.length - 1);
let end = nums[nums.length - 1];
nums = [end, ...rest]
}
return nums
}
3. 메서드 사용하지 않고 swap으로 구현
function solution3(nums, k) {
while (k > 0) {
let start = nums[0];
let endIdx = nums.length - 1;
nums[0] = nums[endIdx];
for (let i = endIdx; i > 0; i--) {
nums[i] = nums[i - 1];
if (i === 1) {
nums[i] = start
}
}
k--;
}
return nums
}
console.log(solution3([1, 2, 3, 4, 5, 6, 7], 3));
console.log(solution3([-1, -100, 3, 99], 2));
console.log(solution3([1, 2], 1));