신고 결과 받기

문제 링크

첫 번째 시도

#코드

function solution(id_list, report, k) {
  const usrNotifyList = {};

  const uniqueReport = report.filter((el, idx) => {
    return report.indexOf(el) === idx;
  });

  const reportLength = uniqueReport.length;

  for (let i = 0; i < reportLength; i++) {
    const wordsArray = uniqueReport[i].split(" ");
    if (!usrNotifyList.hasOwnProperty(wordsArray[1])) {
      usrNotifyList[wordsArray[1]] = [];
    }
    usrNotifyList[wordsArray[1]].push(wordsArray[0]);
  }

  const answer = new Array(id_list.length).fill(0);

  for (let i in usrNotifyList) {
    if (usrNotifyList[i].length >= k) {
      usrNotifyList[i].forEach((el) => {
        id_list.forEach((elIn, idxIn) => {
          if (el === elIn) answer[idxIn]++;
        });
      });
    }
  }

  return answer;
}

#결과

테스트 1 〉 통과 (0.33ms, 29.9MB)
테스트 2 〉 통과 (0.36ms, 30.1MB)
테스트 3 〉 실패 (시간 초과)
테스트 4 〉 통과 (0.44ms, 30MB)
테스트 5 〉 통과 (0.51ms, 29.9MB)
테스트 6 〉 통과 (4.24ms, 30.1MB)
테스트 7 〉 통과 (16.90ms, 31.9MB)
테스트 8 〉 통과 (40.46ms, 32.2MB)
테스트 9 〉 실패 (시간 초과)
테스트 10 〉 실패 (시간 초과)
테스트 11 〉 실패 (시간 초과)
테스트 12 〉 통과 (2.95ms, 31.9MB)
테스트 13 〉 통과 (0.75ms, 30.1MB)
테스트 14 〉 통과 (8762.07ms, 46MB)
테스트 15 〉 실패 (시간 초과)
테스트 16 〉 통과 (0.74ms, 29.8MB)
테스트 17 〉 통과 (0.74ms, 30MB)
테스트 18 〉 통과 (3.13ms, 32.6MB)
테스트 19 〉 통과 (4.56ms, 32.3MB)
테스트 20 〉 통과 (8607.96ms, 46.1MB)
테스트 21 〉 실패 (시간 초과)
테스트 22 〉 통과 (0.27ms, 29.7MB)
테스트 23 〉 통과 (0.26ms, 30MB)
테스트 24 〉 통과 (0.27ms, 30.2MB)

#Report

시간초과로 몇 가지 테스트에서 실패를 했다.

어떤 부분이 속도를 잡아 먹는지 테스트를 해보니, 배열 내의 중복된 요소를 제거하는 부분에서 시간이 오래걸렸다.

이후 이 부분을 set을 이용하여 다시 짜보니 속도가 현저히 줄어들었다.


두 번째 시도

#코드

function solution(id_list, report, k) {
  const usrNotifyList = {};

  const uniqueReport = [...new Set(report)];
  const reportLength = uniqueReport.length;
  for (let i = 0; i < reportLength; i++) {
    const wordsArray = uniqueReport[i].split(" ");
    if (!usrNotifyList.hasOwnProperty(wordsArray[1])) {
      usrNotifyList[wordsArray[1]] = [];
    }
    usrNotifyList[wordsArray[1]].push(wordsArray[0]);
  }

  const answer = new Array(id_list.length).fill(0);

  for (let i in usrNotifyList) {
    if (usrNotifyList[i].length >= k) {
      usrNotifyList[i].forEach((el) => {
        id_list.forEach((elIn, idxIn) => {
          if (el === elIn) answer[idxIn]++;
        });
      });
    }
  }

  return answer;
}

#결과

테스트 1 〉 통과 (0.30ms, 30MB)
테스트 2 〉 통과 (0.19ms, 30MB)
테스트 3 〉 통과 (580.13ms, 87.6MB)
테스트 4 〉 통과 (0.23ms, 29.9MB)
테스트 5 〉 통과 (0.22ms, 29.9MB)
테스트 6 〉 통과 (1.58ms, 30.3MB)
테스트 7 〉 통과 (3.71ms, 31.9MB)
테스트 8 〉 통과 (8.33ms, 32.9MB)
테스트 9 〉 통과 (171.01ms, 57.8MB)
테스트 10 〉 통과 (62.98ms, 57.9MB)
테스트 11 〉 통과 (376.67ms, 87.6MB)
테스트 12 〉 통과 (2.74ms, 31.9MB)
테스트 13 〉 통과 (0.72ms, 30.1MB)
테스트 14 〉 통과 (264.49ms, 50.4MB)
테스트 15 〉 통과 (103.96ms, 61.3MB)
테스트 16 〉 통과 (0.71ms, 30.2MB)
테스트 17 〉 통과 (0.68ms, 30.2MB)
테스트 18 〉 통과 (2.95ms, 32.8MB)
테스트 19 〉 통과 (3.75ms, 31.8MB)
테스트 20 〉 통과 (256.35ms, 50.4MB)
테스트 21 〉 통과 (376.74ms, 62.5MB)
테스트 22 〉 통과 (0.35ms, 30MB)
테스트 23 〉 통과 (0.29ms, 30.1MB)
테스트 24 〉 통과 (0.10ms, 30MB)

#Report

구글링을 통해 찾아본 다른 코드와 비교해보니, 'map, 구조분해할당, indeOf 등' 다양한 문법들을 사용해서 풀었음을 알 수 있었다.
모두 자바스크립트를 공부하며 몇 번씩 접했던 문법들인데, 코드를 짤 때 항상 쓰는 코드만 쓰는 것 같아서 다양한 문법들을 쓰려고 의식을 하며 코드를 짜야겠다.

좋은 웹페이지 즐겨찾기