같은 단어는 싫어

Jason Moon·2022년 5월 20일
0

알고리즘

목록 보기
7/8

풀이👌

function solution(arr, n) {
  let array = [];
  let toDelete = [];
  arr.forEach((element) => {
    if (!array.includes(element)) {
      array.push(element);
    } else if (array.includes(element)) {
      toDelete.push(element);
    }
  });
  let newArray = array.filter((element) => !toDelete.includes(element));
  newArray.sort((a, b) => {
    if (a[n] === b[n]) {
      return (a > b) - (a < b);
    } else {
      return (a[n] > b[n]) - (a[n] < b[n]); // 문자로 이루어진 문자열은 산술연산자 - 로 수행 X NaN를 반환, 비교 연산자로 비교할 수 있다.
    }
  });
  return newArray;
}

console.log(solution(['brush', 'sun', 'brush', 'bed', 'car'], 1));

접근 방식🤔

처음에 문제를 읽고 쉽다고 생각했는데... 중복된 단어를 전부 제거하는데서부터 막혔다. 중복된 단어만을 제거하면 쉬운데 전부를 제거하려니 쉽게 배열을 만들지 못했다. 여러 방법을 해보다가 중복된 단어만 있는 배열을 하나 만들어주고 includes함수와 filter함수를 이용해 저 중복되지 않은 단어들만 없는 새로운 배열을 만들어 줬다. 그리고 정렬을 할때는 sort함수를 썼다. 원래 문자열 요소를 가진 배열을 sort를 이용해 정렬하면 array.sort()이렇게만 해주면 되지만 조건이 있었기 때문에 비교함수를 이용해 해줬다. 문자로 이루어진 문자열은 산술연산 - 가 안되기 때문에 비교 연산자를 이용해 1, 0, -1를 return하도록 해줬다.

회고🤓

포기할까 했지만 끝까지 붙들고 있으니까 풀리긴 풀렸다. 더 쉬운 방식으로 풀 수 있을거 같은데 아직 방법은 찾지는 못했다.

📙 추가 공부

  • 배열 고차함수 sort
  • 배열 중복항목 제거
profile
어려워 보여도 시간을 들여서 해보면 누구나 할 수 있는 일이다

0개의 댓글

관련 채용 정보