티스토리 뷰

알고리즘/프로그래머스

실패율

글을 쓰는 개발자 2021. 1. 27. 23:31
반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def solution1(N, stages):
    answer = []
    dic={}
    total=len(stages)
    for val in stages: 
        dic[val]=dic.get(val,0)+1 ## 만일 stages에 값이 없다면 1로 그렇지 않다면 1증가
    for i in range(1,N+1):
        dic[i]=dic.get(i,0# 존재한다면 그대로 그렇지 않다면 0으로 초기화
        tmp=dic[i] # 사전에 값을 저장
        if total!=0# 런타임에러를 방지하기 위해 조건문 작성
            dic[i]=dic[i]/total
        else:
            dic[i]=0
        total-=tmp 
    for k,v in dic.items(): # key, value를 reverse해서 저장
        if k!=N+1:
            answer.append((v,k))
    answer.sort(reverse=True## 내림차순으로 정렬
    fin=[]
    x=0
    while x<=len(answer)-1:
        k=x+1
        for y in range(x+1,len(answer)): # 값은값이 끝날때까지 반복문 
            if answer[x][0]!=answer[y][0]:
                break
            else:
                k+=1
        lst=[]
        for tmp in range(x,k): # 값은 값을 가진 값들을 임시로 저장
            lst.append(answer[tmp][1])
        lst.sort() ## 오름차순으로 정렬 
        fin+=lst
        x=k
    return fin
cs

이 문제에서 애를 먹은 부분이 공통 확률에서 오름차순이었다. 

필자의 경우에는 21번째줄부터 33줄에 해당하는 부분처럼 해결하였다.

우선 현재 값을 찾은 다음에 같은 값이 끝난 다음 위치까지 찾고 나서 그 부분을 임시로 저장한 다음에 다시 정렬한다음 최종 리스트에 저장하는 방식으로 해결하였다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
def solution(N, stages):
    result = {}
    denominator = len(stages)
    for stage in range(1, N+1):
        if denominator != 0:
            count = stages.count(stage) #해당 갯수 카운트
            result[stage] = count / denominator # 확률 계산
            denominator -= count # 이미 진행된 스테이지 감소
        else:
            result[stage] = 0 # 진행되지 않는 스테이지는 0으로 초기화
    return sorted(result, key=lambda x : result[x], reverse=True# sorted에 result를 그냥 넘기면 result의 keys가 들어감
                                                                  # lambda는 기준을 result[x](=value)로 정렬 reverse는 오름차순
cs

위의 코드에서 배울 점은 count를 써서 해결했다는 것, 그리고 lambda를 활용했다는 것이다.

튜플로 이뤄진 사전 형식에서 result는 key값의 형태로 저장한다는 것을 의미하고 result[x]는 value이므로 value에 대하여 정렬이 이뤄지고 그 방향은 reverse임을 알 수 있다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함