728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/92334

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

 

코드


function solution(id_list, report, k) {
let answer = new Array(id_list.length).fill(0); //정답을 담을 배열 (배열의 길이는 유저 수와 같아야 하므로 배열 크기를 id_list.length로 설정)
let report_obj = {}; // key : 각 유저, value : key 유저를 신고한 유저의 id 를 배열로 담는 객체 생성
//객체의 key를 각 유저로 저장
id_list.map((user) => {
report_obj[user] = [];
});
//각 신고 결과에 대해
report.map((user) => {
let [from, to] = user.split(" "); //[신고한 유저, 신고당한 유저] 순서로 배열에 저장
//중복되는 신고는 제외하고 객체에 {신고당한유저 : [신고한 사람1, 신고한 사람2]} << 이런식으로 담기
if (!report_obj[to].includes(from)) {
report_obj[to].push(from);
}
});
//객체의 각 key에 대해 (신고당한 각 유저에 대해)
for (let key in report_obj) {
//key의 value 개수가 k개 이상이면 (신고한 사람이 k명 이상이면)
if (report_obj[key].length >= k) {
report_obj[key].map((user) => {
answer[id_list.indexOf(user)] += 1; //유저 배열에서 해당 key의 value에 있는 유저들(신고한 유저들)의 index를 찾아 answer배열에 해당 index 위치에 +1 하기
});
}
}
return answer;
}

 

후기


  • 나는 배열과 객체를 적절히 사용하여 풀이를 하였는데 다른 분의 풀이를 보니 Map 객체를 사용하면 코드가 좀 더 깔끔하게 나왔을 것 같다. level1 문제인데 역시 카카오다. 나한텐 너무 복잡하게 느껴져서 몇일만에 풀었다.ㅜㅜ 객체에 대한 지식이 부족한 탓으로 알고 이 기회에 객체에 대한 이해도를 더 높일 수 있는 계기가 되었다 
잘못된 내용이나 수정이 필요한 내용이 있으면 언제든 댓글 달아주세요 감사합니다 😀

+ Recent posts