[프로그래머스]49191번 순위

Effy_ee·2024년 8월 27일
0

코딩테스트

목록 보기
116/118

https://school.programmers.co.kr/learn/courses/30/lessons/49191
플로이드워셜 알고리즘을 통해서 풀어야하는 문제였다.

def solution(n, results):
    answer = 0
    graph = [[0]*n for _ in range(n)]

    for result in results:
        player1, player2 = result
        graph[player1-1][player2-1] = 1  # player1이 player2를 이김
        graph[player2-1][player1-1] = -1  # player2가 player1에게 진다

    for k in range(n):
        for i in range(n):
            for j in range(n):
                if i == j or graph[i][j] in [1, -1]:
                    continue
                if graph[i][k] == 1 and graph[k][j] == 1:
                    # i가 k를 이기고 k가 j를 이긴 경우
                    graph[i][j] = 1  # i가 j를 이김
                    graph[j][i] = -1  # j가 i에게 짐

    for row in graph:
        if row.count(0) == 1:
            answer += 1
    return answer

0개의 댓글