코딩 테스트/프로그래머스

프로그래머스 - 순위 문제 (자바)

programmers.co.kr/learn/courses/30/lessons/49191

 

코딩테스트 연습 - 순위

5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2

programmers.co.kr

보통 순위 문제는 위상정렬을 이용한 순위 출력문제와

이번문제와 같은 확실한 순위를 묻는 방식이 있는데 

문제도 안보고 대충 순위여서 위상정렬로 풀려고하다가 피똥을싸고 

플로이드 워샬 알로리즘을 통해서 해결하였다.

import java.util.Arrays;

// 프로그래머스 순위 문제
class Ranking {
    static final int MAx = 10000;
    public int solution(int n, int[][] results) {
        int answer = 0;
        int[][] dp = new int[n+1][n+1];
        for (int[] arr : dp) {
            Arrays.fill(arr, MAx);
        }

        for(int[] re : results) {
            dp[re[0]][re[1]] = 1;
        }

        for(int k = 1; k <= n; k++) {
            for(int i = 1; i <= n; i++) {
                for(int j = 1; j <= n; j++) {
                    dp[i][j] = Math.min(dp[i][j], dp[i][k] + dp[k][j]);
                }
            }
        }

        for(int i = 1; i <= n; i++) {
            boolean checker = true;
            for(int j = 1; j <= n; j++) {
                if (i == j) continue;
                if(dp[i][j] == MAx && dp[j][i] == MAx) {
                    checker = false;
                }
            }
            if (checker) answer++;
        }
        return answer;
    }
}