프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 비트마스크
  • vanilaJS
  • 알고리즘
  • 코드스테이츠
  • Til
  • 스파르타코딩클럽
  • JavaScript
  • 자바스크립트비트마스크
  • nomadcoders
  • 모던자바스크립트딥다이브
  • 내일배움카드
  • 국비지원
  • MySQL
  • 자바스크립트알고리즘
  • 내일배움단
  • 2023 인프콘 후기
  • nomadcoder
  • 자바스크립트
  • 투포인터알고리즘
  • 코딩프로젝트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

Algorithm & 자료구조/알고리즘 w.JavaScript

[알고리즘 JS]프로그래머스 Lv.1 신고 결과 받기

2022. 6. 21. 16:13

문제

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

 

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

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

programmers.co.kr

풀이

// 입력값
const id_list = ['muzi', 'frodo', 'apeach', 'neo'];

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

const k = 2;

// 풀이
function solution(id_list, report, k) {
  const answer = new Array(id_list.length).fill(0);
  const report_list = {};

  // 불량이용자 : [신고한 유저들] 로 이루어질 맵 생성 (빈 배열 할당)
  id_list.map((user) => (report_list[user] = []));

  report.map((user) => {
    const [user_id, report_id] = user.split(' ');
    // user_id 가 없을 때만 추가해서 중복카운트 방지
    if (!report_list[report_id].includes(user_id))
      report_list[report_id].push(user_id);
  });

  for (let [key, val] of Object.entries(report_list)) {
    // 신고 건수가 k를 넘는 정지대상 이용자
    if (val.length >= k) {
      // id_list의 유저 인덱스와 동일한 answer 배열 증가
      val.map((user) => (answer[id_list.indexOf(user)] += 1));
    }
  }
  return answer;
}

// console.log(solution(id_list, report, k));
  • 처음에는 각 유저별로 신고 건수를 표기한 Map 객체를 만들고, value 값이 2 인 key만 모은 다음, report 배열 요소와 비교해 해당 요소에 정지 유저가 포함되어 있으면 증감시키는 방향으로 풀려고 했다.
  • Map 객체에서 특정 조건을 만족하는지 확인하는게 좀 어려웠고 반복문을 쓸데없이 많이 돌리는 것 같아 다른 풀이를 참고하게 되었다.
  • 내가 생각한 방식은 신고 유저 = [신고한 불량이용자들] 에서 정지 대상 이용자를 포함하고 있으면 정답 배열에서 증감하는 방식이었다. 해당 풀이에서는 불량이용자 = [신고한 유저들] 을 할당해서 이를 세는 방식이었고, 내가 생각한 방식보다 훨씬 간편한 것 같다.
  • 내 방식에서는 신고 유저가 신고한 이용자들 중 정지 이용자가 있는지를 다시 한번 파악해야 하는데, 이 접근 방식에서는 신고 누적 건수(배열의 길이)만 확인하면 되기 때문이다. 
  • 흑흑 문제가 좀 어려웠다, 나중에 다시 풀어봐야지..
저작자표시 (새창열림)

'Algorithm & 자료구조 > 알고리즘 w.JavaScript' 카테고리의 다른 글

[알고리즘 JS] 프로그래머스 LV.1 소수 찾기  (0) 2022.07.18
[알고리즘 JS]백준 17478번: 재귀함수가 뭔가요?  (0) 2022.07.07
[알고리즘]백준 2581번: 소수 W_node.js  (0) 2022.06.16
[알고리즘]백준 1978번: 소수 찾기 W_node.js  (0) 2022.06.16
[알고리즘]백준 10757번: 큰 수 A+B W_node.js  (0) 2022.06.16
    'Algorithm & 자료구조/알고리즘 w.JavaScript' 카테고리의 다른 글
    • [알고리즘 JS] 프로그래머스 LV.1 소수 찾기
    • [알고리즘 JS]백준 17478번: 재귀함수가 뭔가요?
    • [알고리즘]백준 2581번: 소수 W_node.js
    • [알고리즘]백준 1978번: 소수 찾기 W_node.js
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바