실패율

sihwan_e·2021년 1월 22일
0

https://programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스 문제 실패율

접근 1

def solution(N, stages):
    answer = []
    fail = {}
    count = {}
    stages.sort()

    for i in range(len(stages)):
        count[i+1] = stages.count(i+1)
        # print(count)
    a = len(stages)
    for i in range(len(stages)):
        try:
            #print(stages[i], len(stages), N)
            fail[i+1] = count[i+1] / a
            a = a - count[i+1]

            print(len(stages), fail)
        except ZeroDivisionError:
            print(0)

    # for key, value in fail.items():
        #print(key, value)
    answer = sorted(fail.values())
    print(answer)


print(solution(5, [2, 1, 2, 6, 2, 4, 3, 3]))
8 {1: 0.125, 2: 0.42857142857142855, 3: 0.5, 4: 0.5, 5: 0.0, 6: 1.0}

딕셔너리로 접근해서 할려고했는데
이걸 다시 정렬하려니 골치가 아팠다..

def solution(N, stages):
    answer = {}
    fail = {}
    count = {}
    stages.sort()

    for i in range(len(stages)):
        count[i+1] = stages.count(i+1)
        # print(count)
    a = len(stages)
    for i in range(len(stages)):
        try:
            #print(stages[i], len(stages), N)
            fail[i+1] = count[i+1] / a
            a = a - count[i+1]

            print(a, fail)
        except ZeroDivisionError:
            print(0)

    return sorted(fail, key=lambda x: fail[x], reverse=True)


print(solution(5, [2, 1, 2, 6, 2, 4, 3, 3]))
0 {1: 0.125, 2: 0.42857142857142855, 3: 0.5, 4: 0.5, 5: 0.0, 6: 1.0}
0
0
[6, 3, 4, 2, 1, 5]

이건 N을 고려를 하지 못했다.

접근 3

def solution(N, stages):
    fail = {}
    count = {}
    stages.sort()

    for i in range(1, N+1):
        count[i] = stages.count(i)
    a = len(stages)
    for i in range(1, N+1):
        try:
            fail[i] = count[i] / a
            a = a - count[i]

        except ZeroDivisionError:
            print(0)

    return sorted(fail, key=lambda x: fail[x], reverse=True)
테스트 1 〉	실패 (0.02ms, 10.3MB)
테스트 2 〉	통과 (0.26ms, 10.3MB)
테스트 3 〉	통과 (53.72ms, 10.4MB)
테스트 4 〉	통과 (274.22ms, 11.3MB)
테스트 5 〉	통과 (1355.63ms, 15.6MB)
테스트 6 〉	실패 (1.70ms, 10.2MB)
테스트 7 〉	실패 (11.42ms, 10.3MB)
테스트 8 〉	통과 (263.71ms, 11.2MB)
테스트 9 〉	실패 (1363.99ms, 15.7MB)
테스트 10 〉	통과 (110.91ms, 11.1MB)
테스트 11 〉	통과 (275.54ms, 11.2MB)
테스트 12 〉	통과 (180.52ms, 11.9MB)
테스트 13 〉	실패 (416.55ms, 12MB)
테스트 14 〉	통과 (0.06ms, 10.2MB)
테스트 15 〉	통과 (13.40ms, 10.6MB)
테스트 16 〉	통과 (6.17ms, 10.4MB)
테스트 17 〉	통과 (14.09ms, 10.6MB)
테스트 18 〉	통과 (6.73ms, 10.3MB)
테스트 19 〉	통과 (1.69ms, 10.2MB)
테스트 20 〉	통과 (11.73ms, 10.4MB)
테스트 21 〉	통과 (20.99ms, 10.9MB)
테스트 22 〉	통과 (1109.70ms, 18.4MB)
테스트 23 〉	실패 (17.83ms, 12.1MB)
테스트 24 〉	실패 (58.77ms, 12.3MB)
테스트 25 〉	실패 (0.02ms, 10.2MB)
테스트 26 〉	통과 (0.01ms, 10.2MB)
테스트 27 〉	통과 (0.01ms, 10.2MB)

아쉽다

아마도 try-except 문에서의 프린트문 때문에 초과 된것 같아서
if else문으로 바꾸었다

def solution(N, stages):
    fail = {}
    count = {}
    stages.sort()

    for i in range(1, N+1):
        count[i] = stages.count(i)
    a = len(stages)
    for i in range(1, N+1):
        if count[i] != 0:
            fail[i] = count[i] / a
            a = a - count[i]

        else:
            fail[i] = 0

    return sorted(fail, key=lambda x: fail[x], reverse=True)


print(solution(5, [2, 1, 2, 6, 2, 4, 3, 3]))
profile
Sometimes you gotta run before you can walk.

0개의 댓글