실패율

문제 프로그래머스

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
def solution(N, stages):
fail=[]
remain=len(stages)
for i in range(N):
if remain!=0:
p=stages.count(i+1)
fail.append((i+1,p/remain))
remain-=p
else:
fail.append((i+1,0))
return list(map(lambda x:x[0],sorted(fail,reverse=True,key=lambda x:x[1])))

print(solution(5, [2, 1, 2, 6, 2, 4, 3, 3]))

주어진 stages 배열을 정수를 증가시키면서 count를 세고 적절히 fail 배열에 집어넣고, 정렬하면 된다.

정렬된 배열을 리턴하는 부분이 꽤 복잡한데, 실패율(인덱스 1)을 기준으로 내림차순 정렬 후 스테이지 번호(인덱스 0)를 리스트로 반환한다.

이 문제는 전에 풀었던 문제인데, 코드가 너무 더러운 것 같아 다시 풀었다. 이전 코드는

1
2
3
4
5
6
7
8
9
10
def solution(N, stages):
a=[]
cur=len(stages)
for i in range(N):
if cur!=0:
a.append(stages.count(i+1)/cur)
cur-=stages.count(i+1)
else:
a.append(0)
return list(map(lambda x:x+1,sorted(range(len(a)),key=a.__getitem__, reverse=True)))

다시 작성한 코드보다 가독성도 별로고, 코드 해석도 어려웠다.

결론: “숏코딩”보다 “클린코딩”하자.