말랑한 하루

[Programmers] 신고 결과 받기 (Lv 1, JavaScript) 본문

문제풀이/Programmers

[Programmers] 신고 결과 받기 (Lv 1, JavaScript)

지수는말랑이 2022. 6. 27. 16:08
반응형

[ 학습 내용 ]

- includes : include와 혼동하지 말 것

- push : add, append와 혼동하지 말 것

- Set : 동일 신고 내용을 제거하기 위해 사용했음

- Map : 신고된 유저와 회수, 신고한 유저와 메일 처리 회수를 key 매핑하기 위해 사용

[ 소스 코드 ]

function solution(id_list, report, k) {
    var answer = [];
    var users = [];
    var mail = [];
    id_list.map((id) => {
        users[id] = [];
        mail[id] = 0;
    })
    report.map((report_detail) => {
        let user = report_detail.split(" ");
        if (!users[user[1]].includes(user[0])) {
            // 자신을 신고한 사람 추가
            users[user[1]].push(user[0]);
        }
    })
    
    id_list.map((id) => {
        let length = users[id].length;
        // 자신이 정지가 될 때 신고한 사람에게 처리메일 추가
        if (length >= k) {
            users[id].map((user) => {
                mail[user]++;
            })
        }
    })
    console.log(mail)
    id_list.map((id, index) => {
        answer[index] = mail[id]
    })
    return answer;
}

[ 심화 코드 ]

function solution(id_list, report, k) {
    let reports = [...new Set(report)].map(a=>{return a.split(' ')});
    let counts = new Map();
    for (const bad of reports){
        counts.set(bad[1],counts.get(bad[1])+1||1)
    }
    let good = new Map();
    for(const report of reports){
        if(counts.get(report[1])>=k){
            good.set(report[0],good.get(report[0])+1||1)
        }
    }
    let answer = id_list.map(a=>good.get(a)||0)
    return answer;
}

[ 코드 분석 ]

1. Set 깊은 복사를 한 이유

[new Set(report)]
=>  [
      Set {
        'muzi frodo',
        'apeach frodo',
        'frodo neo',
        'muzi neo',
        'apeach muzi'
      }
    ]

[...new Set(report)]
=>  [
      'muzi frodo',
      'apeach frodo',
      'frodo neo',
      'muzi neo',
      'apeach muzi'
    ]

2. 논리연산자 ||를 쓴 이유

...
반응형
Comments