-
프로그래머스 - 신고 결과 받기Algorithm 2023. 5. 12. 14:53
문제
풀이
먼저 한 유저가 같은 유저를 여러번 신고를 해도 1회 신고로 처리하기 위해 report 배열에서 중복제거를 해준다.
이 후 id_list와 매칭할 수 있는 유저당 신고 당한횟수 배열과 유저당 받은 메일 횟수 배열을 만들어 유저당 신고 당한횟수 배열에 유저당 신고당한 횟수를 채운다.
이 후 신고당한 횟수가 정지 조건인 k보다 많은 인덱스에 해당하는 유저당 받은 메일 횟수 배열 인덱스를 증가시킨다.
코드를 보면서 예시 1번을 진행해보자.
function solution(id_list, report, k) { // report 배열에서 중복 제거 let setReportArray = [...new Set(report)]; // 각 유저당 신고당한 횟수 이 배열은 id_list 유저 순서와 동일 ex) [0, 0, 0, 0] let reportedUser = Array(id_list.length).fill(0); // 각 유저당 받은 메일 횟수 이 배열은 id_list 유저 순서와 동일 ex) [0, 0, 0, 0] let receivedMail = Array(id_list.length).fill(0); // ' ' 기준으로 문자열 자르기 // ex) ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"] // => [[muzi, frodo], [apeach, frodo], [frodo, neo], [muzi, neo], [apeach, muzi]] setReportArray = setReportArray.map(reportedData => reportedData.split(' ')); setReportArray.map(reportedDataArray => { // 신고당한 유저의 이름으로 id_list의 인덱스를 찾아 reportedUser의 해당 인덱스값 증가 // 각 유저당 받은 신고 횟수 ex) ["muni", "frodo", "apeach", "neo"] [1, 2, 0, 2] reportedUser[id_list.indexOf(reportedDataArray[1])]++; }); // 각 유저당 받은 메일 횟수 reportedUser.map((reportedNum, idx) => { // 신고가 k번 이상이어야 메일을 받는다 if(reportedNum >= k) { setReportArray.map(reportedDataArray => { // 한 유저가 신고한 유저가 신고당한 횟수가 k번을 넘어 정지가 됐다면 if(reportedDataArray[1] === id_list[idx]) // 신고한 유저이름과 매칭되는 receivedMail의 해당 인덱스값 증가 // ex) ["muni", "frodo", "apeach", "neo"] [2, 1, 1, 0] receivedMail[id_list.indexOf(reportedDataArray[0])]++; }) } }); return receivedMail; }
'Algorithm' 카테고리의 다른 글
프로그래머스 - 신규 아이디 추천 (0) 2023.05.15 프로그래머스 - 과일 장수 (1) 2023.05.12 프로그래머스 - 체육복 (0) 2023.05.06 프로그래머스 - [카카오 인턴] 키패드 누르기 (0) 2023.05.06 프로그래머스 - 두 개 뽑아서 더하기 (0) 2023.05.04