프로그래머스 JS - 신고 결과 받기

joon·2022년 4월 7일
0

알고리즘

목록 보기
1/2

📃 신고 결과 받기

프로그래머스 2022 카카오 블라인드 코딩테스트 문제입니다. 자바스크립트로 풀었습니다.
신고 결과 받기

✔ 입력값

  • id_list: 이용자의 id가 담긴 문자열 배열
  • repoort: 신고한 유저 id와 그 유저가 신고한 유저id 문자열 배열
  • k: 정지 기준 신고 횟수 (포함)

✔ 출력값

  • 각 유저별 처리 결과 메일을 받은 횟수를 담은 배열

✔ 풀이과정

신고를 당한 유저의 신고 수, 신고한 유저의 id 알아야 합니다.
신고 당한 유저의 id를 key로 하고 신고한 유저의 id를 배열로 저장하는 객체를 만들어서 문제를 해결했습니다.

✔ 문제 예시 1번 객체

  • key: 신고 당한 유저의 id
  • value: 신고를 한 유저의 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하여준다.

0개의 댓글