programmers - 신고결과 받기

주지홍·2022년 3월 28일
0

프로그래머스 Lv 1

목록 보기
1/53
post-thumbnail

문제

신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.

각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.

  • 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
  • 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
  • k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
  • 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.

매개변수

  1. 이용자의 ID가 담긴 문자열 배열 id_list,
  2. 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열 report,
  3. 정지 기준이 되는 신고 횟수 k가 매개변수

각 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 return 하도록 solution 함수를 완성해주세요.

문제 상세 보러가기

💡 풀이

const solution = (id_list, report, k) => {
  const answer = new Array(id_list.length);

  answer.fill(0);
  /*answer를 id_list 크기를 가진 배열을 만들고 
	fill 메서드를 활용해 초기값을 0으로 할당*/

  const report_list = {};

  id_list.map(user_id => {
    report_list[user_id] = [];
  });
  
  /*report_list 객체에 
	key는 유저id value는 신고한 사람을 담기위한 빈 배열을 추가*/

  report.map(users => {
    const [user_id, report_id] = users.split(' ');
    if (!report_list[report_id].includes(user_id)) {
      report_list[report_id].push(user_id);
    }
  });
  
  /*신고한 id 와 신고당한 id로 나누기 위해 split 메서드를 이용한후
	각각 user_id, report_id로 나누어줌. 배열에 포함여부를 확인하여
	포함하지 않을때 신고자 이름 추가*/

  for (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.*/
  return answer;
};

const id_list = ['muzi', 'frodo', 'apeach', 'neo'];
const report = [
  'muzi frodo',
  'apeach frodo',
  'frodo neo',
  'muzi neo',
  'apeach muzi',
];
const k = 2;

solution(id_list, report, k);
profile
오늘도 내일도 끊임없는 싸움

0개의 댓글

관련 채용 정보