코딩 테스트/프로그래머스 level1

신고 결과 받기

fullfish 2022. 4. 21. 01:32

아이디어

객체화 시켜서 푼다

 

처음에는 신고자 : 피신고자로 객체화 했는데 k값을 넘는 피신고자를 찾으려면

피신고자 : 신고자로 하고 피신고자의 길이를 보면 되니까 이렇게 바꿨다

 

처음에는 제제받는사람까지 구한후 result값을 또 새로 객체를 만들어서 신고자 : 제제받는 피신고자 이렇게 해야하나 싶었다 (이러면 쓸데없이 객체하나 더 만드는거 같았다) 

고민하다가 let result = new Array(id_list.length).fill(0)로 0으로 채워진 배열을 만들고

제제받는 사람을 키 값으로 가지고 있는 값들의 list인덱스를 직접 result의 인덱스에 매칭시켜서 ++해줬다

 

코드

function solution(id_list, report, k) {
  //객체화 시켜서
  let obj = {};
  let overk_tarket = [];
  let result = new Array(id_list.length).fill(0);
  //신고자와 피신고자 객체화
  for (let i = 0; i < report.length; i++) {
    let target = report[i].split(" ")[0];
    let reporter = report[i].split(" ")[1];
    // 아직 객체화 안된거면 객체로 만들고
    if (obj[reporter] === undefined) {
      obj[reporter] = [target];
    } // 객체 있으면 배열로 푸쉬
    else {
      // 중복된거 삭제위해
      if (!obj[reporter].includes(target)) {
        obj[reporter].push(target);
      }
    }
  }
  //k값 넘는 사람(제제받는사람) 배열에 넣음
  for (let key in obj) {
    if (obj[key].length >= k) {
      overk_tarket.push(key);
    }
  }
  //제제 받는 사람을 키로 가지고 있는 값들의 list인덱스를 찾아서 배열에 ++
  for (let i = 0; i < overk_tarket.length; i++) {
    for (let j = 0; j < obj[overk_tarket[i]].length; j++) {
      let index = id_list.indexOf(obj[overk_tarket[i]][j]);
      result[index]++;
    }
  }
  return result;
}

'코딩 테스트 > 프로그래머스 level1' 카테고리의 다른 글

신규 아이디 추천  (1) 2022.04.27
로또의 최고 순위와 최저 순위  (0) 2022.04.27
체육복  (0) 2022.04.19
K번째수  (0) 2022.04.19
최소직사각형  (0) 2022.04.19