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
};
코드는 어렵지 않다..! 그리고 금방 외울수 있을정도의 알고리즘이다.