Sort the odd ( 6 kyu )

문제

You have an array of numbers.
Your task is to sort ascending odd numbers but even numbers must be on their places.

Zero isn’t an odd number and you don’t need to move it. If you have an empty array, you need to return it.

Example

sortArray([5, 3, 2, 8, 1, 4]) == [1, 3, 2, 8, 5, 4]

배열에서 홀수만 순서대로 정렬하는 문제

풀이

function sortArray(array) {
  let idx = [], odd = [], j = 0;
  for ( let i = 0; i < array.length; i++ ) {
    if ( array[i] % 2 === 1 ) {
      odd.push(array[i]);
      idx.push(i);
    }
  }
  odd.sort((a,b) => { return a-b });
  idx.sort((a,b) => { return a-b });
  for ( let i of idx ) {
    array[i] = odd[j];
    j++
  }
  return array
}

너무 복잡하게 풀었다..

array를 포문으로 돌면서 홀수와 해당 인덱스를 odd, idx에 담아 오름차순으로 정렬 후에 기본 배열 array에 정렬한 값을 대입하는 방법

다른 사람의 풀이

function sortArray(array) {
  const odd = array.filter((x) => x % 2).sort((a,b) => a - b);
  return array.map((x) => x % 2 ? odd.shift() : x);
}

맵, 필터 같이쓰면 풀수있겠다 생각은 했는데 이렇게 접근하면 풀 수 있구나 싶은 코드.

shift() 사용하기.. 메모..


+ Recent posts