자바스크립트 알고리즘 문제/프로그래머스

[프로그래머스] 도넛과 막대 그래프(Lv.2) - 알고리즘

이승재(Frontend Developer) 2024. 3. 28. 23:41

 

💡 도넛과 막대 그래프

문제 보기

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

 

프로그래머스

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

programmers.co.kr

 

 

function solution(edges) {
    var answer = new Array(4).fill(0);
    const graph = new Map()

    
    edges.forEach(([from,to])=>{
        if(!graph.has(from)){
            graph.set(from,[0,0])
        }
        if(!graph.has(to)){
            graph.set(to,[0,0])
        }
        graph.get(from)[0]++
        graph.get(to)[1]++
    })
    
    let total =0
    for(let key of graph.keys()){
        if(graph.get(key)[0] >=2 && graph.get(key)[1]===0){
            answer[0] =key
            total = graph.get(key)[0]
            break
        }
    }
    
    edges.forEach(([from,to])=>{
        if(from===answer[0]){
            graph.get(to)[1]--
        }
    })
    
    
    for(let key of graph.keys()){
        if(graph.get(key)[0]===0 && graph.get(key)[1]>=0){
            answer[2]++
        }
        else if(graph.get(key)[0]==2 && graph.get(key)[1]==2){
            answer[3]++
        }
    }
    answer[1]=total - answer[2]-answer[3]

 
    return answer;
}