[코딩테스트/프로그래머스/Python]순위

Enter·2021년 8월 10일
0

코딩테스트

목록 보기
29/68

💡생각

누구한테 이겼는지랑 누구한테 졌는지를 저장하는 그래프를 2개 만들어 모든 사람과의 경기 결과가 나오는 사람을 기준으로 정해서 그래프에 나와있는 정보를 따라가 순위를 알 수 있는지 판단해야 한다고 생각함.



⏬다른사람의 코드

시간이 너무 지나서 다른사람의 코드를 봄.


🔗풀이 참고
https://summa-cum-laude.tistory.com/16

from collections import Counter


def solution(n, results):
    # p1이 p2에 이겼을 때는 1로,
    # p1이 p2에 졌을 때는 -1로 초기화
    board = [[0] * n for _ in range(n)]
    for p1, p2 in results:
        board[p1 - 1][p2 - 1] = 1
        board[p2 - 1][p1 - 1] = -1

    for k in range(n):                  # 1. 모든 노드를 중간점(경로)로 가정하며
        for i in range(n):              # 2. 점수판을 순회
            for j in range(n):          # 3. 만약 i가 k에 이겼고, k가 j에 이겼다면
                if board[i][j] == 0:    # i는 j에게도 이김 (지는 것도 동일)
                    if board[i][k] == 1 and board[k][j] == 1:
                        board[i][j] = 1
                    elif board[i][k] == -1 and board[k][j] == -1:
                        board[i][j] = -1

    # 각 노드 점수판에 0이 하나(다른 노드들에 대해 승패가 모두 결정됨)인 경우만 셈
    ans = 0
    for i in range(n):
        if Counter(board[i])[0] == 1:
            ans += 1

    return ans







🔗프로그래머스 - 순위
https://programmers.co.kr/learn/courses/30/lessons/49191

profile
Cherish the moment :)

0개의 댓글