반응형
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/92334
문제 풀이 힌트
01. 신고한 거를 2차월 배열로 나타내기
02. 신고 받은거 k이상인 사람 색출
03. 신고 받은 사람을 신고한 사람의 index 값을 +1 해준다.
문제 풀이 코드
function solution(id_list, report, k) {
let graph = Array.from({length: id_list.length}, () => new Array(id_list.length).fill(0)); //2차원 배열 생성
let indexPeople = new Map(); //각 사람을 index로 표현하기 위함
for(let i=0; i< id_list.length; i++){
indexPeople.set(id_list[i], i); //이름(key)에 따라서 index(value)지정
}
let answer = new Array(id_list.length).fill(0); //정지 당한 사람 신고한 사람 index 올려줄 것임
//2차원 배열에다가 값으로 넣기
for(let point of report){
let [a,b] = point.split(" ");
let j = indexPeople.get(a);
let i = indexPeople.get(b);
graph[i][j] = 1; //무조건 1이다. 한사람한테 여러번 받아도 1번 신고 당한 것으로 처리
}
for(let i=0; i< id_list.length; i++){
let num = graph[i].reduce((a,b) => a+b,0) // 총 몇점 받았는지?
if(num >= k){ //num이 k이상일 때만 그 사람을 신고한 사람 색출하기
for(let j=0; j<id_list.length; j++){
if(i !== j){
if(graph[i][j] === 1){
answer[j] += 1; //신고한 사람 index 값 +1
}
}
}
}
}
return answer;
}
Only 풀이 코드
function solution(id_list, report, k) {
let graph = Array.from({length: id_list.length}, () => new Array(id_list.length).fill(0));
let indexPeople = new Map();
for(let i=0; i< id_list.length; i++){
indexPeople.set(id_list[i], i);
}
let answer = new Array(id_list.length).fill(0);
for(let point of report){
let [a,b] = point.split(" ");
let j = indexPeople.get(a);
let i = indexPeople.get(b);
graph[i][j] = 1;
}
for(let i=0; i< id_list.length; i++){
let num = graph[i].reduce((a,b) => a+b,0)
if(num >= k){
for(let j=0; j<id_list.length; j++){
if(i !== j){
if(graph[i][j] === 1){
answer[j] += 1;
}
}
}
}
}
return answer;
}
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
프로그래머스 : 로또의 최고 순위와 최저 순위 - javascript(이분탐색 활용) (0) | 2024.04.01 |
---|---|
헷갈리는 객체 키와 값 가져오기 (for...in 반복문 /Object.keys() ) (0) | 2024.03.22 |
프로그래머스: 주차 요금 계산 - javascript(구현 , 객체 구조 활용) (0) | 2024.03.21 |
dfs, 완전탐색, 백트래킹 관련 지식 정리 (0) | 2024.03.21 |
프로그래머스: 두 큐 합 같게 만들기 - javascript(시간복잡도 고려하는 구현문제) (1) | 2024.03.18 |