알고리즘 문제 풀기

프로그래머스 : 신고 결과 받기 - javascript(구현 , Map)

Fo_rdang 2024. 3. 21. 20:33
반응형

문제 출처 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이 힌트 

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; 
}
반응형