프로그래머스 2022 카카오 블라인드 코딩테스트 문제입니다. 자바스크립트로 풀었습니다.
신고 결과 받기
신고를 당한 유저의 신고 수, 신고한 유저의 id 알아야 합니다.
신고 당한 유저의 id를 key로 하고 신고한 유저의 id를 배열로 저장하는 객체를 만들어서 문제를 해결했습니다.
const report_list = {
muzi: [apeach]
frodo: [muzi, apeach] - 정지
apeach: []
neo: [frodo, muzi] - 정지
}
function solution(id_list, report, k) {
const answer = new Array(id_list.length).fill(0);
console.log(answer);
const report_list = {}; //
id_list.map((user) => {
report_list[user] = [];
});
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);
}
});
for (const key in report_list) {
if (report_list[key].length >= k) {
//이용정지 유저
report_list[key].map((user) => {
answer[id_list.indexOf(user)] += 1;
});
}
}
return answer;
}
solution(
["muzi", "frodo", "apeach", "neo"],
["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"],
2
);
const answer = new Array(id_list.length).fill(0);
answer 배열을 id_list의 크기만큼 할당하고 fill함수를 사용하여 0으로 초기화합니다.
id_list.map((user)=>{report_list[user] = []})
report_list 객체에 key는 uesr의 id 값을 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하여준다.