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

해피데빙·2022년 7월 26일
0

코딩테스트

목록 보기
32/52
post-custom-banner

드디어 이걸 시간 안에 풀었다!
30분 안에 풀었고, 10초 안에 풀리도록 했다
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92334

function solution(id_list, report, k) {
    //각 유저는 한번에 한명의 유저 신고 가능 
    //계속해서 신고 가능 : 동일한 유저에 대한 신고 횟수 1회 
    //k번 이상 신고된 유저 - 게시판 이용 정지 - 취합해서 마지막에 게시판 이용 정지 
    //교집합 배열 : let difference = arr1.filter(x => arr2.includes(x)); 
    
    1. 중복 삭제 : 한 사람이 같은 사람을 신고한 건 하나로 친다
    let set = new Set(report); 
    report = Array.from(set)
    
    2. 신고한 사람 : 신고 당한 사람 객체 생성
    let obj={}; 
    for(let id of id_list){ 
        obj[id] = []; 
    }
    
    3. 신고 당한 횟수 세는 객체 생성
    let count = {}; 
     for(let id of id_list){ 
        count[id] = 0; 
    }
    
    let candidates = [];
    
    4. 시간 단축의 핵심 
    : 2,3에 필요한 map을 각각 쓰는 게 아니라 한번만 쓴다 
    
    report.map(el => { 
    	//2번 객체 생성
       let key= el.split(' ')[0] 
       let val= el.split(' ')[1]
       obj[key].push(val)   
    	//3번 객체 생성 중 k이상이면 candidates에 넣는다(이게 목적)
      count[val]++;
    if(count[val] >= k)candidates.push(val)
       })
   
    
    //candidates와 2번 객체의 교집합을 구해서 길이로 만든다
    let answer=[];
    for(let key in obj){ 
        answer.push(obj[key].filter(el => candidates.includes(el)).length)
    }
    
    return answer
 
}
profile
노션 : https://garrulous-gander-3f2.notion.site/c488d337791c4c4cb6d93cb9fcc26f17
post-custom-banner

0개의 댓글