프로그래머스 Lv.1 신고결과받기

Kim Jason·2023년 4월 3일
0

알고리즘 노트

목록 보기
17/35
post-thumbnail

2022 카카오 블라인드 채용

function solution(id_list, report, k) {
    // ✅ { 유저id: 신고를 당한 횟수 }
    const reportedNum = {};
    // ✅ { 유저id: 이메일 받는 횟수 }
    const getEmailNum = {};
    id_list.forEach(user => getEmailNum[user] = 0);
    
    // ✅ report 중복 요소 제거
    const reportSet = new Set(report);
    report = [...reportSet].map(el => el.split(' '));

	report.forEach(reportInfo => {
        reportedNum[reportInfo[1]] = (reportedNum[reportInfo[1]] || 0) + 1;
    })
    
    // ✅ 신고를 당한 횟수가 k 이상인 유저만 필터
    const valReportedNumArr = Object.entries(reportedNum)
        .filter(info => info[1] >= k)
        .map(info => info[0]);
    
    // ✅ 유저별로 이메일 받는 횟수를 객체에 정리
    report.forEach(info => {
        if (valReportedNumArr.includes(info[1])) getEmailNum[info[0]] += 1;
    });
    
    return id_list.map(id => getEmailNum[id]);
}

입력값의 제한은 다음과 같다.

  • 2 <= 배열 id_list의 길이 <= 1,000
  • 1 <= 배열 report의 길이 <= 200,000

문제 풀이 흐름을 다음과 같이 잡았다.

  • 신고 내역(배열 report)의 중복을 제거한다 > 유저별 신고당한 횟수를 정리한다 > k번 이상 신고당한 유저를 필터링한다 > 유저별 이메일 받는 횟수를 갱신한다.
profile
성장지향형 프론트엔드 개발자

0개의 댓글