leetcode 207. Course Schedule Topological sort

정대만·2024년 1월 4일

코딩테스트

목록 보기
47/51

Topological sort
=>위상 정렬 을 이용한 문제이다.

개념은 동민 나 씨의 위상정렬 개념으로 한번 이해했다.

위상정렬은
말그대로 5을 수강하기 위해서는 7이라는 것을 꼭 수강해야된다는것!
그럼 이 수강 순서를 나타내기 위해서는 꼭 필수 과목을 들어야된다.
필수과목 듣는수를 count 해서 필수과목이=0 이됬을때 -> 즉 이제는 들을수 있을때 이 수를 queue 에다가 넣어서 bfs 를 이용하면 쉽게 풀린다.
여기서는 다행스럽게도 숫자를 이용했기 때문에 map /object 를 사용하지 않고도
그냥 일반적인 Array 형식을 이용할수 있었다.

/**
 * @param {number} numCourses
 * @param {number[][]} prerequisites
 * @return {boolean}
 */
var canFinish = function(numCourses, prerequisites) {
    //여기서는 다행스럽게도 그냥..숫자만 으로 나타내는 식이다. 
    const graph= Array.from({length:numCourses},()=> new Array())
    const graph_count= Array.from({length:numCourses}).fill(0);
    var queue=[];
    for(var i=0; i<prerequisites.length; i++){
      var [end,start]= prerequisites[i];
      graph[start].push(end);
      graph_count[end]+=1;
    }
     for(var i=0; i<graph_count.length; i++){
         if(graph_count[i]==0){
             queue.push(i);
         }
     }
     while(queue.length){
        var hey= queue.shift();
        numCourses-=1;
        for(var ii=0; ii<graph[hey].length; ii++){
          graph_count[ graph[hey][ii]]-=1;
          if(graph_count[graph[hey][ii]]==0){
              queue.push(graph[hey][ii]);

          }
        }

     }

    return numCourses==0
};

코드는 어렵지 않다..! 그리고 금방 외울수 있을정도의 알고리즘이다.

profile
안녕하세요

0개의 댓글