[ BOJ / Python ] 6156번 Cow Contest

황승환·2022년 8월 22일
0

Python

목록 보기
461/498

이번 문제는 플로이드-와샬 알고리즘을 활용하여 쉽게 해결하였다. grid를 2차원 리스트로 선언하고, a가 b를 이겼을 경우 grid[a][b]를 1로 증가시켜준다. 그리고 플로이드-와샬 알고리즘을 통해 grid[i][j]가 0일 경우 grid[i][k]grid[k][j]가 모두 1일 경우 grid[i][j]를 1로 갱신해주었다. 이렇게 완성된 grid를 가로와 세로를 확인하여 가로의 1의 갯수 + 세로의 1의 갯수가 n-1일 경우 해당 cow의 순위를 정확히 알 수 있으므로 정답 변수를 1 증가시켜주었다.

Code

n, m = map(int, input().split())
grid = [[0 for _ in range(n+1)] for _ in range(n+1)]
for _ in range(m):
    a, b = map(int, input().split())
    grid[a][b] = 1
for k in range(1, n+1):
    for i in range(1, n+1):
        for j in range(1, n+1):
            if grid[i][j] == 0:
                if grid[i][k] and grid[k][j]:
                    grid[i][j] = 1
answer = 0
for i in range(1, n+1):
    w, l = 0, 0
    for j in range(1, n+1):
        if grid[i][j] == 1:
            w += 1
        if grid[j][i] == 1:
            l += 1
    if w+l == n-1:
        answer += 1
print(answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글