[JS] 프로그래머스 / 코딩테스트 입문 / 신고 결과 받기

2024. 1. 18. 13:14· 코딩 테스트/programmers
목차
  1. 문제
  2. 메모
  3. 정답

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

메모

Object.entries()를 사용할 때 예시 1보다 예시 2처럼 코드를 작성하는 편이 가독성이 더 높다.

// 예시 1: Object.entries()로 객체를 배열 형태로 변형해서 사용한다

blockedUserObj = Object.entries(blockedUserObj);

blockedUserObj.forEach(user => {
  const blockedUser = user[0];
  const reportedCount = user[1];
  if (reportedCount >= k) blockedUserList.push(blockedUser);
});
// 예시 2: for문 자체에서 Object.entries()를 사용한다

for (const [key, value] of Object.entries(blockedUserObj)) {
  const blockedUser = key;
  const reportedCount = value;
  if (reportedCount >= 2) blockedUserList.push(blockedUser);
}

정답

function solution(id_list, report, k) {
  // 신고 명단에서 한 유저가 동일한 유저를 중복 신고한 경우를 필터링한다
  const set = new Set(report);
  const uniqueReport = [...set];

  let userObj = {};
  let reportedUserObj = {};

  // 신고한 유저 명단, 신고당한 유저 명단을 객체로 만든다
  uniqueReport.forEach(item => {
    const user = item.split(" ")[0];
    const reportedUser = item.split(" ")[1];

    if (userObj[user]) {
      userObj[user].push(reportedUser);
    } else {
      userObj[user] = [reportedUser];
    }

    if (reportedUserObj[reportedUser]) {
      reportedUserObj[reportedUser] += 1;
    } else {
      reportedUserObj[reportedUser] = 1;
    }
  });

  // 신고당한 유저 명단에서 k회 이상 신고된 유저들을 차단된 유저 명단에 추가한다
  const blockedUsers = [];

  for (const [key, value] of Object.entries(reportedUserObj)) {
    const blockedUser = key;
    const reportedCount = value;
    if (reportedCount >= k) blockedUsers.push(blockedUser);
  }

  // 정답 배열을 유저의 길이 만큼 만든 뒤, 우선 0으로 채운다
  let answer = new Array(id_list.length).fill(0);

  // 신고한 유저 명단을 순회한다
  // for문 안에서 유저가 신고한 유저의 수만큼 또 순회한다
  // 유저가 신고한 유저가 차단된 유저 명단에 포함되어 있는 경우:
  // 해당 유저 인덱스에 1을 더한다
  for (const [key, value] of Object.entries(userObj)) {
    const user = key;
    const reportedUsers = value;
    for (let j = 0; j < reportedUsers.length; j++) {
      const reportedUser = reportedUsers[j];
      const userIndex = id_list.indexOf(user);
      if (blockedUsers.includes(reportedUser)) {
        answer[userIndex] += 1;
      }
    }
  }

  return answer;
}
 
 
 
저작자표시 비영리 변경금지 (새창열림)
  1. 문제
  2. 메모
  3. 정답
'코딩 테스트/programmers' 카테고리의 다른 글
  • [JS] 프로그래머스 / 코딩테스트 입문 / 가장 많이 받은 선물
  • [JS] 프로그래머스 / 코딩테스트 입문 / [PCCP 기출문제] 1번 / 붕대 감기
  • [JS] 프로그래머스 / 코딩테스트 입문 / 공원 산책
  • [JS] 프로그래머스 / 코딩테스트 입문 / 달리기 경주
카버
카버
카버의 코딩일기카버 님의 블로그입니다.
카버
카버의 코딩일기
카버
  • All (414)
    • JavaScript (36)
    • CSS (1)
    • TypeScript (6)
    • React (17)
    • Redux (6)
    • Next.js (13)
    • Gatsby (2)
    • 코딩 테스트 (305)
      • programmers (238)
      • Baekjoon (51)
      • CroCoder (15)
    • ETC (28)
      • Error (9)
      • CS (8)
      • Terminal (2)
      • GitHub (1)
hELLO · Designed By 정상우.v4.2.2
카버
[JS] 프로그래머스 / 코딩테스트 입문 / 신고 결과 받기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.