var sortArrayByParity = function(nums) {
for(let i=0, j=nums.length-1; i<j;) {
if(!(nums[i] % 2)) {
i++
}
else if(nums[j] % 2) {
j--
}
else if(nums[i] % 2 && !(nums[j] % 2)){
[nums[i], nums[j]] = [nums[j], nums[i]]
i++
j--
}
}
return nums
};
문제가 요구하는 것은 간단하다.
짝수는 앞으로, 홀수는 뒤로 정렬하는 것이다.
위 조건만 만족하면 순서는 상관없다.
Two Pointers 방식으로 접근해서 해결했다.
1.i
포인터는 앞에서부터,j
포인터는 뒤에서부터 접근한다.
2.nums[i]
가 짝수일 경우, 옮길 필요가 없으므로i
포인터를 +1만큼 옮긴다.
3.nums[j]
가 홀수일 경우, 옮길 필요가 없으므로j
포인터를 -1만큼 옮긴다.
4. 포인터를 계속 옮기다가nums[i]
가 홀수고nums[j]
가 짝수일 경우, 구조 분해 할당을 이용해서 서로 바꿔준다.
위 과정을i<j
를 만족하는 한 계속 반복한다.