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]))