주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요.
원래 있던 숫자의 순서는 바꾸지 말아주세요.
(새로운 배열을 생성해서는 안 됩니다.)Input: [0,1,0,3,12] Output: [1,3,12,0,0]
const moveZeroes = (nums) => { const endIndex = nums.length - 1; // 끝에서 부터 시작 for (let i = endIndex; i > -1; i--) { if (nums[i] === 0) { nums.splice(i, 1); // 0을 만날 시 0을 잘라낸다. nums.push(0); // 0을 맨 뒤에 추가 } } return nums; }; const number = [0, 1, 0, 3, 12]; const result = moveZeroes(number); console.log(result); // [1,3,12,0,0]
const moveZeroes = (nums) => { const endIndex = nums.length - 1; for (let i = endIndex; i > -1; i--) { nums[i] === 0 && nums.push(...nums.splice(i, 1)); } return nums; }; const number = [0, 1, 0, 3, 12]; const result = moveZeroes(number); console.log(result); // [1,3,12,0,0]
처음에 접근했을 때는 앞에서부터 숫자를 빼내었지만, index가 동적으로 변하기에 원하는 값이 안나왔다. 계속 고민하던 도중 유진님의 도움으로 뒤에서부터 접근하여 0을 잘라내었다. (역시 갓유진님...)
확실히 React의 조건부 렌더링을 접한 후, 리팩토링시 코드가 좀더 간결해짐을 느낄 수 있었다. 물론 처음으로 접할 때는 최적화(?)된 코드가 잘 나오지 않지만 다시 한 번 봤을 때, 좀 더 효율적으로 작성할 수 있는 힘이 생기는 것 같아 기분이 좀 좋아져간다!! 😊😊