본문 바로가기
Algorithm/프로그래머스[Programmers]

[JS] 2022카카오 : 신고 결과 받기 프로그래머스 LEVEL2

by jgo 2022. 6. 23.

문제 링크

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

풀이 전략

각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
   - 신고 횟수에 제한은 없습니다.
   - 서로 다른 유저를 계속해서 신고할 수 있습니다.
   - 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.

k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.

자기 자신을 신고하는 경우는 없습니다.

코드 

function solution(id_list, report, k) {
    const answer = [];
    const mySet = new Set(report);
    const myHm = new Map();
    const respondentArr = new Map();

    for (const elem of mySet) {
        const [repoter, respondent] = elem.split(" ");
        if (myHm.has(repoter))
            myHm.set(repoter, [...myHm.get(repoter), respondent]);
        else myHm.set(repoter, [respondent]);
        if (respondentArr.has(respondent))
            respondentArr.set(respondent, respondentArr.get(respondent) + 1);
        else respondentArr.set(respondent, 1);
    }
    let filteringArr = [...respondentArr];
    filteringArr = filteringArr.filter((v) => v[1] >= k).map((v) => v[0]);

    for (const person of id_list) {
        let cnt = 0;
        const value = myHm.get(person);

        if (value) {
            for (const a of value) {
                for (const b of filteringArr) {
                    if (a === b) cnt++;
                }
            }
        }
        answer.push(cnt);
    }

    return answer;
}

 

회고

map과 set을 적극적으로 활용하여 풀었다. 하지만 이것들을 떠올리고 사용한 것 치고는 효율이 조금 떨어지는 것 같다. 조금 더 잘할 수 있었을 텐데....라는 마음으로 다른 분의 코드를 보니 내가 하고 작성하고 싶었던 코드의 방향과 같아서 많이 배울 수 있었다. 

 

더 좋은 방법이나 의견이 있으시다면 댓글 부탁드립니다 :)

댓글