Algorithm 03 | code kata

SammyJung·2021년 4월 14일
0

문제

주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요.
원래 있던 숫자의 순서는 바꾸지 말아주세요.

(새로운 배열을 생성해서는 안 됩니다.)

Input: [0,1,0,3,12]
Output: [1,3,12,0,0]

나의 풀이

const moveZeroes = nums => {

let count =0;
for(i=0;i<nums.length;i++){
 if(nums[i]===0){
   nums.splice(i,1);
   i--;
   count++;
 }
}
for(i=0;i<count;i++){
  nums.push(0);
}

  return nums;
}

접근방법

1) 먼저 배열에서 특정요소 0의 값을 제거해야한다.

특정요소의 값을 제거 하는 방법은 splice를 써도되고 filter를 써도 되지만
filter의 경우 조건을 만족하는 새로운 배열을 리턴하므로
나는 기존의 배열에서 값을 제거 하는 방향으로 접근하고 싶어서 splice 함수를 써보았다.

2) 반복문을 통해 nums 주어진배열의 요소값에 인덱스 i로 하나씩 접근하여 0이면
splice i번째 부터 1개만 삭제한다.

주의 splice는 원본배열의 요소가 삭제되면서 인덱스 값이 하나씩 줄어들기 때문에 i-- i도 1감소 시킨다.

3) 반복문을 돌면서 0의 갯수를 세는 count를 1씩 증가 시킨다

4) count 갯수 만큼 nums 배열에 0을 push 한다.

push 메소드는 뒤에서 부터 요소값을 추가하고 원본 배열의 값을 수정하여 리턴한다.

오랫만에 코드카타 문제 풀이를 올렸는데.. 매일매일 알고리즘 문제를 풀기는 했지만 나만의 고민으로 오랫만에 풀어본 것이 뿌듯하여 올려본다!:D

  • 예시로 이해하는 filter 메소드
st words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter(word => word.length > 6);

console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]
  • 예시로 이해하는 splice메소드
var myFish = ['angel', 'clown', 'trumpet', 'sturgeon'];
var removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue');

// myFish is ["parrot", "anemone", "blue", "trumpet", "sturgeon"]
// removed is ["angel", "clown"]

splice의 매개변수 - MDN 참고

array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
자르기 시작하는 인덱스, 자르는 요소의 갯수, 추가할 요소1,2,

profile
안녕하세요! 프론트엔드 개발자 새미입니다:D

0개의 댓글