문제 설명 및 제한사항
아이디어 및 해결 방법
코드
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
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges