[프로그래머스] 신고 결과 받기

Narcoker·2022년 11월 29일
0

코딩테스트

목록 보기
59/152
post-custom-banner

문제

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

풀이

userInfo Map은 유저 id를 키, 각종 정보를 가지고 있는 객체를 value로 한다.
객체의 프로퍼티는 다음과 같다.
report는 유저가 신고한 사람을 저장하는 Set
reported는 해당 유저를 신고한 유저를 저장하는 Set
makeStopUserCount 는 유저가 신고한 유저가 제제당한 카운트

신고내역을 저장한 후 reported size가 k 이상이면
해당 유저를 신고한 사람의 makeStopUserCount 를 1 증가시킨다.

이 처리가 끝나면 유저를 순회하면서 answer 배열에 makeStopUserCount를 push한다.

function solution(id_list, report, k) {
    const answer = [];
    // 유저 등록
    const userInfos = id_list.reduce((res, name) => {
        let user = { report: new Set(), reported: new Set(), makeStopUserCount: 0 }
        res.set(name, user);
        return res;
    }, new Map());


    // 신고 기록
    [...new Set(report)].forEach((log) => {
        let [user, report] = log.split(" ");
        userInfos.get(user).report.add(report);
        userInfos.get(report).reported.add(user);
    });

    // 제제 처리 카운트 누적
    userInfos.forEach((userInfo) => {
        if (userInfo.reported.size >= k) {
            userInfo.reported.forEach((user) => {
                userInfos.get(user).makeStopUserCount++;
            })
        }
    });

    // 답안 만들기
    userInfos.forEach((userInfo) => {
        answer.push(userInfo.makeStopUserCount);
    });

    return answer;
}
profile
열정, 끈기, 집념의 Frontend Developer
post-custom-banner

0개의 댓글