728x90
https://programmers.co.kr/learn/courses/30/lessons/49191
코딩테스트 연습 - 순위
5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2
programmers.co.kr
- 문제

문제
풀이
- 플로이드 와샬 문제로 모든 경우의 수를 계산한다.
- 2차원 boolean 형식을 map을 생성한 뒤, 플로이드 와샬 알고리즘을 사용한다.
- i -> k , k -> j 가 연결되어 있다면 i->j 또한 연결되어 있다.
- if(map [i][k] && map [k][j]) map [i][j] = true;
- 모든 경우의 수를 다 계산한 뒤,
- 자기 자신을 제외한 다른 것들의 순위중 계산할 수 없는 게 한 개라도 존재하면 순번을 알 수 없는 노드이다
- 자기 자신을 제외한 다른 것들의 순위중 계산할 수 없는 게 한 개라도 존재하지 않다면 순번을 알 수 있으므로 answer을 증가시킨다.
-
public static int solution(int n, int[][] results) { int answer = 0; boolean[][] map = new boolean[n][n]; for(int i=0;i<results.length;++i) { int start = results[i][0] - 1; int end = results[i][1] - 1; map[start][end] = true; //시작 위치 -> 종료 위치에 있는 것을 방문 표시한다. } //플로이드 와샬 알고리즘 for(int k=0;k<n;++k) { for(int i=0;i<n;++i) { for(int j=0;j<n;++j) { if(map[i][k] && map[k][j]) { // 만약 i -> k , k -> j로 가는 길이 있다면 i -> j 로 가는 길도 존재 map[i][j] = true; } } } } OUTER:for(int i=0;i<n;++i) { for(int j=0;j<n;++j) { if(i == j) // 자기 자신이 아니고 continue; if(map[i][j] == false && map[j][i] == false) // j -> i, i -> j 둘 다 알 수 있는 방법이 없다면 그 노드는 순위를 알수 없다 continue OUTER; } answer++;//여기까지 왔다면 순위를 알수 있는 것이므로 answer 증가 } return answer; }
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| LEVEL 3 : 자물쇠와 열쇠 (0) | 2021.11.26 |
|---|---|
| LEVEL 3 : 다단계 칫솔 판매 (0) | 2021.11.26 |
| LEVEL 3 : 네트워크 (0) | 2021.11.26 |
| LEVEL 3 : 정수 삼각형 (0) | 2021.11.26 |
| LEVEL 3 : 리틀 프렌즈 사천성 (0) | 2021.11.25 |