본문 바로가기

Coding/내일배움캠프

[내일배움캠프] Node.js 4기 | Day 67 | 24.03.11.(월)

  1. 코딩테스트 연습
  2. 2022 KAKAO BLIND RECRUITMENT
  3. 신고 결과 받기
 

 

// 해시 자료구조를 사용할 수 있는가를 물어보는 문제

function solution(id_list, report, k) {
    const answer = new Array(id_list.length);
    answer.fill(0)
    
    // answer 배열을 id_list의 크기만큼 할당하고 fill 함수를 사용하여 0으로 초기화한다.
    
    const report_list = {} //
    
    // report_list 객체에 key는 user의 id 값을, value는 신고한 사람을 담기 위한 빈 배열을 추가한다.
    
    id_list.map((user) => {
        report_list[user] = [] // key로 userid를 value로 빈 배열을 가지는 객체
    })
    
    report.map((user) => {
        const [user_id, report_id] = user.split(' ')
        if(!report_list[report_id].includes(user_id)){
            report_list[report_id].push(user_id)
        }
    })
    
    /*
        report의 값이 ["muzi frodo", ...] 와 같이 '신고한 id 신고 당한 id' 형식의 띄어 쓰기로
        구분된 문자열을 split으로 자르고 각각 user_id와 report_id로 나눠주었다.
        그리고 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다.
    */
    
    for (const key in report_list){
        if (report_list[key].length >= k){ // 이용정지 유저
            report_list[key].map((user)=>{
                answer[id_list.indexOf(user)] += 1
            })
        }
    }
    
    // report_list의 배열길이가 k값 이상이면 정지된 유저이다.
    // answer에 해당 유저를 신고한 유저가 받은 메일을 수를 +1하여준다.
    
    return answer;
    
}