반응형

문제 설명

출처: 프로그래머스

 

제한 사항

출처: 프로그래머스

 

풀이

처음 문제를 본 나의 생각을 정리해봤다.

  • [유저명]: [신고당한 횟수] key, value를 가진 Object가 존재해야 할 것이다.
    이때, 신고당한 횟수는 number값이다.
  • [유저명]: [나를 신고한 ID 목록] key, value를 가진 Object가 존재해야 할 것이다.
    이때, value는 string array여야 할 것 같다.

그래서 나온 소스코드는 아래와 같다.

두 개의 Object를 만들어도 되지만 그냥 하나의 reportInfo라는 Object안에 신고당한 횟수 cnt와 나를 신고한 ID 목록을 Object로 또 만들었다.

그래서 그런지 가독성은 조금 떨어지는 느낌..

 

그리고 문제 조건 중에

  • 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.

라는 내용이 있기 때문에.. if문을 하나 추가했다.

 

마지막으로 id_list 순서대로 return을 해야 하기 때문에 한번 더 반복문을 추가하여 마무리를 했다.

 

function solution(id_list, report, k) {
    var answer = [], len = id_list.length, reportInfo = {};
    
    report.forEach((v) => {
        let user = v.split(" ");
        
        if(reportInfo.hasOwnProperty(user[1])) {
            if(reportInfo[user[1]].reporter.indexOf(user[0]) == -1) {
                reportInfo[user[1]].cnt++;
                reportInfo[user[1]].reporter.push(user[0]);
            }
        } else {
            reportInfo[user[1]] = {
                cnt: 1,
                reporter: [user[0]]
            }
        }
    });
    
    answer = id_list.map((v) => {
        let cnt = 0;
        for(let [key, value] of Object.entries(reportInfo)) {
            if(value.cnt >= k) {
                if(value.reporter.indexOf(v) > -1) {
                    cnt++;
                }
            }
        }
        
        return cnt;
    });
    
    return answer;
}

 

사실 제대로 짠 건지는 모르겠는데 그래도 통과를 했으니 패스..

 

 

반응형