신고 결과 받기 - javascript

문제 (출처)

👉 https://programmers.co.kr/learn/courses/30/lessons/92334

나의 접근

  • 코테 4번째 문제만의 큰 난관에 봉착했다 ㅎㄷㄷ 하지만 나름 유추 한걸 적어본다.

  • "한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다." 라는 문제 설명을 보고 report array를 set로 만들면 중복이 제거되겠다 라는 생각

  • report를 split함수로 나누어 따로 저장해야겠다는 생각

  • 계속 고민을 하다 풀이를 검색하고 그 풀이를 내것으로 만들자는 생각 하고 풀이를 보았지만, 그것마저도 이해하기 어려웠다!!

  • 차곡차곡 쌓아 나중에 이글을 봤을때는 엄청 쉬운문제였잖아 할 수 있는 날이 오기를 기대하며 풀이로 넘어간드아~

풀이

function solution(id_list, report, k) {
  let reportObj = new Map();
  id_list.forEach((val) => {
    return (reportObj[val] = {
      report: [],
      reported: 0,
      isStoppedId: false,
    });
  });

  report.forEach((val) => {
    let [reportPerson, reportedPerson] = val.split(' ');

    if (reportObj[reportPerson].report.indexOf(reportedPerson) === -1) {
      reportObj[reportPerson].report.push(reportedPerson);
      reportObj[reportedPerson].reported++
      
      if (reportObj[reportedPerson].reported >= k) {
        reportObj[reportedPerson].isStoppedId = true;
      }
    }
  });

  let sendMail = id_list.map((val) => {
    return reportObj[val].report.filter((reportId) => reportObj[reportId].isStoppedId).length;
  });

  return sendMail;
}

오늘의 배운점 및 교훈

  • 자료구조 map의 사용성에 대해 알수 있었다. 원래는 id_list별로 array변수를 만들어서 넣어야하나? 라고 고민해었는데 아주 간편하게 처리 할 수있게 되었다.
    사실 아직은 어색하지만 앞으로 코테 준비할때 의도적으로라도 써봐야겠다. 앞으로 친하게 지내자 ...
  • map() 와 forEach() 차이점에 대해 알게되었다. 쉽게 생각해서 map()은 실행결과를 모은 새로운 배열을 리턴해준다로 생각하겠다. 우선은...
  • indexOf()의 사용법도 알게되었다.
  • filter()는 가끔 썼지만... 쓸때마다 햇갈린다... 하지만 반복만이 익숙해진다라는 생각으로 계속해서 해봐야겠다 .
  • 이번 문제는 카카오 2022년 문제 답게 어려웠지만, 내년에 이글을 봤을때는 아주 평이하네 라는 생각이 들면 좋겠다 ㅋㅋ

좋은 웹페이지 즐겨찾기