본문 바로가기

코테

[프로그래머스] <순위> 파이썬

programmers.co.kr/learn/courses/30/lessons/49191

 

코딩테스트 연습 - 순위

5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2

programmers.co.kr

def solution(n, results):
    arr = [[False] * (n+1) for _ in range(n+1)]
    for i, j in results :
        arr[i][j] = True
    for i in range(1,n+1) :
        for j in range(1, n+1) :
            if i == j : continue
            else :
                if arr[i][j] == True :
                    for k in range(1,n+1) :
                        if k == i : continue
                        if arr[j][k] == True : arr[i][k] = True
    answer = 0
    for i in range(1, n+1) :
        cnt = 0
        for j in range(1,n+1) :
            if arr[i][j] == True or arr[j][i]: cnt += 1
        if cnt == n-1 : answer += 1    
    return answer
    
    

정확성 테스트

테스트 1 통과 (0.02ms, 10.1MB)
테스트 2 실패 (0.05ms, 10.2MB)
테스트 3 통과 (0.10ms, 10.2MB)
테스트 4 통과 (0.17ms, 10.3MB)
테스트 5 통과 (1.11ms, 10.2MB)
테스트 6 통과 (2.59ms, 10.1MB)
테스트 7 실패 (13.76ms, 10.3MB)
테스트 8 실패 (30.08ms, 10.4MB)
테스트 9 통과 (42.15ms, 10.6MB)
테스트 10 통과 (42.76ms, 10.6MB)

채점 결과

정확성: 70.0

합계: 70.0 / 100.0

 

테스트 케이스 추가

def solution(n, results):
    arr = [[False] * (n+1) for _ in range(n+1)]
    for i, j in results :
        arr[i][j] = True
    for i in range(1,n+1) :
        for j in range(1, n+1) :
            for k in range(1,n+1) :
                if arr[j][i] and arr[i][k] :
                    arr[j][k] = True

    answer = 0
    for i in range(1, n+1) :
        cnt = 0
        for j in range(1,n+1) :
            if arr[i][j] == True or arr[j][i]: cnt += 1
        if cnt == n-1 : answer += 1    
    return answer
    
    

정확성 테스트

테스트 1 통과 (0.03ms, 10.3MB)
테스트 2 통과 (0.06ms, 10.2MB)
테스트 3 통과 (0.16ms, 10.3MB)
테스트 4 통과 (0.80ms, 10.3MB)
테스트 5 통과 (2.46ms, 10.2MB)
테스트 6 통과 (4.65ms, 10.4MB)
테스트 7 통과 (20.89ms, 10.4MB)
테스트 8 통과 (47.26ms, 10.4MB)
테스트 9 통과 (64.85ms, 10.5MB)
테스트 10 통과 (65.91ms, 10.6MB)

채점 결과

정확성: 100.0

합계: 100.0 / 100.0