Question
문제 해설
- 내가 들어야하는 총 과목의 수 :
numCourses
- 배열
prerequisites
prerequisites[i] = [ai, bi]
=> ai
과정을 수강하려면 먼저 bi
과정을 수강해야 함
- 모든 과목을 들을 수 있는지 여부 확인
Solution
풀이 접근 방법
- 선행 과목해야하는 과목 확인 => 위상정렬 이용
- 위상정렬로 탐색한 과목이 전체 과목 수와 맞으면 모든 과목 수강 가능하다는 의미
정답 코드
class Solution {
public LinkedList<Integer>[] course;
public boolean canFinish(int numCourses, int[][] prerequisites) {
course = new LinkedList[numCourses];
int[] indegree = new int[numCourses];
for (int i = 0; i < numCourses; i++) {
course[i] = new LinkedList<Integer>();
}
for (int[] pre : prerequisites) {
int start = pre[0];
int end = pre[1];
course[start].add(end);
indegree[end]++;
}
return checkCourse(indegree, numCourses);
}
public boolean checkCourse(int[] indegree, int numCourses) {
HashSet<Integer> subjects = new HashSet<Integer>();
Queue<Integer> queue = new LinkedList<Integer>();
for (int i = 0; i < numCourses; i++) {
if (indegree[i] == 0)
queue.add(i);
}
while(!queue.isEmpty()) {
int subject = queue.poll();
for (int next : course[subject]) {
indegree[next]--;
if (indegree[next] == 0)
queue.add(next);
}
subjects.add(subject);
}
if (subjects.size() == numCourses)
return true;
return false;
}
}