CodeKata 5 - W3D4
문제
주어진 숫자 배열에서, 0을 배열의 마지막쪽으로 이동시켜주세요.
원래 있던 숫자의 순서는 바꾸지 말아주세요.
(새로운 배열을 생성해서는 안 됩니다.)
Input: [0,1,0,3,12]
Output: [1,3,12,0,0]
첫번째 풀이
const moveZeroes = nums => {
arr1 = nums.filter(i => i===0)
arr2 = nums.filter(i => i!==0)
return [...arr2,...arr1]
}
첫번째 풀이는 밑에 새로운 배열을 생성해서는 안 됩니다
라는 조건을 보지 못하고 풀었다...
따로 오름차순이나 내림차순이라는 조건이 없었고 그냥 값이 0인 요소들만 뽑아서 뒤로 넣어주면 되는 문제여서 filter 메소드를 이용하여 0인 값을 가진 새로운 배열 arr1과 0을 제외한 값들을 가진 새로운 배열 arr2 이렇게 배열 두개를 만들었다. 그리고 두 배열의 요소들을 spread 연산자를 이용해서 꺼내서 한 배열로 묶어주었다.
그렇게 모든 test가 success가 됐지만 애초에 조건을 무시해버린 무지성풀이였기 때문에
fail....😭
두번째 풀이
const moveZeroes = nums => {
return nums.sort((a, b) => (a === 0) - (b === 0))
}
사실 첫번째 풀이로 풀고나서 배열을 새로 생성하면 안된다는 조건에 맞는 풀이를 생각하기 위해 다양한 방법을 고려해봤다. pop과 unshift를 이용해서 풀어보려고도 했고 indexOf와 slice를 이용해서도 풀어봤는데 for문을 돌리는 과정에서 값을 꺼내서 다시 앞이나 뒤로 넣어주는 과정이 되다 보니까 원래 배열에서 요소들이 갖던 인덱스값이 변해버려서 기존의 값들을 불러와서 비교해야하는데 방금 넣어준 값을 다시 비교하는 상황이 발생해서 정렬하기가 쉽지 않았다. 그래서 배열에서 사용하는 다양한 메소드들을 다시 공부하면서 이 문제에 응용할만한 메소드를 찾아보았다.
결론은 sort를 이용해서 풀었다. sort 메소드는 a,b라는 배열안의 임의의 값을 비교해서 나오는 값을 이용해서 순서를 조정하여 일반적인 케이스로는 내림차순 정렬이나 오름차순 정렬과 같은 곳에 많이 쓰이는 메소드이다.
이 문제에서는 a===0, b===0이라는 조건을 통해 값이 0인경우 true가 되게 하여 0이 아닌 1의 값을 가질 수 있도록 해주었고 또한 이 조건 덕분에 0이 아닌 값들은 모두 false가 되어 -1에 해당하는 값을 갖게 되었다. 이를 이용하여 0을 맨 뒤쪽으로 모두 이동시킬 수 있었다.
오늘의 교훈
문제를 잘읽자.
알고 있다고 생각한 메소드도 다시한번 살펴보자🤟🏻
Author And Source
이 문제에 관하여(CodeKata 5 - W3D4), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@4_21ee/CodeKata-5-W3D4저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)