주어진 숫자 배열에서, 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
의 조건부 렌더링을 접한 후, 리팩토링시 코드가 좀더 간결해짐을 느낄 수 있었다. 물론 처음으로 접할 때는 최적화(?)된 코드가 잘 나오지 않지만 다시 한 번 봤을 때, 좀 더 효율적으로 작성할 수 있는 힘이 생기는 것 같아 기분이 좀 좋아져간다!! 😊😊