숫자 찾기

YEONGHUN KO·2021년 11월 29일
0

ALGORITHMS - PRACTICE

목록 보기
24/50
post-thumbnail

1. 숫자 찾기.

이번엔 다소 간단한 문제이다. array가 주어지고 commands가 주어질 때 commands에 따라서 array안에 원소를 뽑아서 return한다. 예를 들어, commands = [1,3,1] arr = [1,2,3,4] 이라고 했을 때 arr에서 1~3번째 원소를 뽑은다음에 sort해서 1번째 원소를 뽑으면 된다. 즉 1이 뽑히게 된다.

2. 접근 방법.

접근 방법도 간단하다.

  • pseudo code
    • commands의 원소를 하나하나 sortAndPick함수에 pass한다.
    • pass된 대로 arr에서 원소를 slice한 다음 pick한다
function mysolution(array, commands) {
  var answer = [];
  for (let i = 0; i < commands.length; i++) {
    sortAndPick(commands[i][0], commands[i][1], commands[i][2]);
  }

  function sortAndPick(start, end, pick) {
    let chosen = array.slice(start - 1, end).sort((a, b) => a - b)[pick - 1];
    answer.push(chosen);
  }

  return answer;
}

상당히 직관적이다. 읽기 쉽다. 그러나 개발자라면 항상 질문해야한다. 여기서 개선할 수 있는 방법이 있을까? 다른 분의 답을 살펴보자

function otherSolution(array, commands) {
  return commands.map((command) => {
    const [sPos, ePos, pos] = command;
    const newArray = array
      .filter((v, i) => i >= sPos - 1 && i <= ePos - 1)
      .sort((a, b) => a - b);

    return newArray[pos - 1];
  });
}

let array = [1, 5, 2, 6, 3, 7, 4];

let commands = [
  [2, 5, 3],
  [4, 4, 1],
  [1, 7, 3],
];

// [5, 6, 3]

filter에서 index를 가지고도 filter 할 수 있는 줄은 몰랐다. 게다가 map안에서 filter한것도 흥미롭고 const를 packing한것도 깔끔하다. 잘 정리정돈된 방을 보는 느낌이다.

profile
'과연 이게 최선일까?' 끊임없이 생각하기

0개의 댓글