프로그래머스 | 신고 결과 받기(2022카카오 LV1)

Namgung Jong Min·2022년 9월 2일
0

코딩테스트

목록 보기
1/1

신고 결과 받기

풀이과정

  • 신고자와 신고받은 사람의 자료를 다루기 쉽도록 array형태로 저장
  • 신고 받은 사람과 그 횟수를 저장한 자료 만들기

다룰 자료들을 쉽게 쓰기 위해 조정

let answer = new Array(id_list.length).fill(0);

우선 answer 값을 Number 자료형 0으로 채워서 이후 인덱스 접근을 통해 조건 만족시 산술이 가능하게 하였다.

let reports = [...new Set(report)].map((item) => item.split(" "));

여러번 신고하여도 한번의 신고 횟수로 처리되기 때문에 Set함수를 이용하여 중복되는 값들을 없앤 후, map method를 이용하여 각 인덱스 값을 다루기 쉬운 배열로 치환하여 reports라는 변수에 저장하였다.

Array.map()

  • 각 배열 값에 대한 콜백함수 결과를 반환

Set

  • value만을 저장하며 중복을 허용하지 않는 Collection
reported = new Map();
  reports.map((item) => {
    reported.set(item[1], reported.get(item[1]) + 1 || 1);
  });

신고받은 사람과 그 횟수를 Map함수의 형태로 reported라는 변수에 저장하였다. array.map() method를 사용하여 reports의 각 인덱스("신고자 신고당한사람") 접근하여 신고 받은 사람을 Key, 그 횟수를 value 형태로 저장하였다.

Map
다양한 자료형의 key를 허용하고, key-value 형태의 자료형을 저장 가능한 Collection.
Object와 비교하여 다양한 자료형의 key를 허용하고, 값이 추가/삭제 시 전용 메스드를 통해야함
Map(3) { 'frodo' => 2, 'neo' => 2, 'muzi' => 1 }

Map을 통해 신고받은 사람에게 접근하고 reports를 반복문을 돌려서 k번 이상 신고받은 사람을 신고한 사람에 접근할 때마다 id_list index에 위치한 answer값의 인덱스 값을 +1 해주었다

for (let item of reports) {
    if (reported.get(item[1]) >= k) {
      answer[id_list.indexOf(item[0])] += 1;
    }
  }

Test Case

Function

profile
토끼굴을 정복하는 개발자

0개의 댓글