[프로그래머스] 순위(C++)

김영한·2021년 6월 30일
0

알고리즘

목록 보기
57/74

문제 링크 : 프로그래머스 순위

[문제 접근]

백준 2458번과 동일한 문제이다.
플로이드 워샬 알고리즘을 이용해서 a가 b를 이기고 b가 c를 이겼으면 a가 c를 이기는 것으로 판단한다.
이렇게 되면 알 수 있는 모든 선수들의 대결 결과가 arr배열에 true로 저장된다.

이후에 한 선수가 모든 선수와의 대결에서 결과를 알고 있으면 answer++을 해준다.

[소스 코드]

#include <string>
#include <vector>

using namespace std;
bool arr[101][101];

int solution(int n, vector<vector<int>> results) {
    int answer = 0;
    for(int i=0 ; i<results.size() ; i++) {
        arr[results[i][0]][results[i][1]] = true;
    }
    
    for(int k=1 ; k<=n ; k++) {
        for(int i=1 ; i<=n ; i++) {
            for(int j=1 ; j<=n ; j++) {
                if(arr[i][k] && arr[k][j]) {
                    arr[i][j] = true;
                }
            }
        }
    }
    
    for(int i=1 ; i<=n ; i++) {
        int cnt=0;
        for(int j=1 ; j<=n ; j++) {
            if(arr[i][j] || arr[j][i]) cnt++;
        }
        if(cnt+1 == n) answer++;
    }
    
    return answer;
}

0개의 댓글