[프로그래머스 lev1/JS] 신고 결과 받기

woolee의 기록보관소·2022년 11월 3일
0

알고리즘 문제풀이

목록 보기
41/178

문제 출처

프로그래머스 lev1 - 신고 결과 받기

문제

나의 풀이

function solution(id_list, report, k) {
  report = [...new Set(report)]; // 중복 제거 

  for (let i=0; i<report.length; i++) {
    report[i]=report[i].split(' ');
  }

  // 신고당한 사람
  let reported = new Array(id_list.length).fill(0);
  
  for (let i=0; i<report.length; i++) {
    if (id_list.includes(report[i][1])) {
      reported[id_list.indexOf(report[i][1])]++; 
    }
  }

  // 신고 해서 메일 받은 사람들 목록 (k번 이상)
  let tmp = [];

  for (let i=0; i<reported.length; i++) {
    if (reported[i] >= k) {
      for (let j=0; j<report.length; j++) {
        if (report[j][1] === id_list[i]) {
          tmp.push(report[j][0]); 
        }
      }
    }
  }
  
  // 메일 받은 사람들 정렬 
  let user = new Array(id_list.length).fill(0);
  for (let i=0; i<tmp.length; i++) {
    user[id_list.indexOf(tmp[i])]++; 
  }
  return user; 
}

console.log(
  solution(
    ["muzi", "frodo", "apeach", "neo"], 
["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"], 
2));

다른 풀이

1

function solution(id_list, report, k) {
  let answer = new Array(id_list.length); 
answer.fill(0); 

let report_list = {}; 

id_list.map((user) => {
  report_list[user] = []
})

report.map((user) => {
  const [user_id, report_id] = user.split(' ')
  if (!report_list[report_id].includes(user_id)) {
    report_list[report_id].push(user_id)
  }
})

for (let key in report_list) {
  if (report_list[key].length >= k) {
    report_list[key].map((user) => {
      answer[id_list.indexOf(user)] += 1
    })
  }
}

  return answer;
}

console.log(
  solution(
    ["muzi", "frodo", "apeach", "neo"], 
["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"], 
2));

2

function solution(id_list, report, k) {
  let reports = [...new Set(report)].map(a=>{return a.split(' ')});

  let counts = new Map();
  for (const bad of reports){
      counts.set(bad[1],counts.get(bad[1])+1||1)
  }

  let good = new Map();
  for(const report of reports){
      if(counts.get(report[1])>=k){
          good.set(report[0],good.get(report[0])+1||1)
      }
  }
  let answer = id_list.map(a=>good.get(a)||0)
  return answer;
}

console.log(
  solution(
    ["muzi", "frodo", "apeach", "neo"], 
["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"], 
2));
profile
https://medium.com/@wooleejaan

0개의 댓글