title: "[프로그래머스] 순위 Python 파이썬 해설 (Level 3) - 이도훈"
cleanUrl: "programmers/49191"
description: "프로그래머스 Level 3 문제 [순위]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

def solution(n, results):
    # A[i][j] = i가 j를 이겼으면 1, i가 j에게 졌으면 -1
    A = [[0 for i in range(101)] for j in range(101)]
    
    for win, lose in results:
        A[win][lose] = 1
        A[lose][win] = -1

    for i in range(1, n+1):
        for j in range(1, n+1):
            # i==j이거나, 이미 정보를 유추할 수 있는 경우는 스킵합니다.
            if A[i][j] != 0:
            	continue
            # 나머지 k를 순회하면서, i가 j를 이겼는지 간접적으로 유추해봅니다.
            for k in range(1, n+1):
                if A[i][k] == 1 and A[k][j] == 1:
                    A[i][j] = 1
                    A[j][i] = -1
                if A[i][k] == -1 and A[k][j] == -1:
                    A[i][j] = -1
                    A[j][i] = 1

    answer = 0
    for i in range(1, n+1):
        if sum([x == 0 for x in A[i][1:n+1]]) == 1:
            answer += 1
    return answer

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges