Dia Egg - Shugo Chara

Python공부/프로그래머스

(Python) 실패율 (프로그래머스 Lv.1)

별ㅇI 2023. 6. 19. 03:12
728x90
반응형

실패율 (프로그래머스 Lv.1)

https://school.programmers.co.kr/learn/courses/30/lessons/42889

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

처음 제출 한 내 코드

def solution(N, stages):
    answer = [0]*(N+2)
    n_answer = {}
    for stage in stages:
        for j in range(1,stage+1):
            answer[j] += 1
        counts[stage] += 1
    answer[N+1],answer[0] = 0, 0
                    
    for i in range(1,N+1):
        if stages.count(i)==0 or stages[i]==0:
            n_answer[i] = 0
        else:
            n_answer[i] = stages.count(i)/answer[i]
    print(n_answer)

    n_answer = dict(sorted(n_answer.items(), key=lambda x:x[1],reverse = True))

    answer = list(n_answer.keys())
    return answer

이걸로 테스트 5,9,25,27 번이 런타임에러 및 시간초과가 나왔다!

사실 stage가 20만 이하이길래 그럴것같았다.

일단 count가 시간을 엄청 잡아먹는 친구라 따로 count를 저장할 리스트를 만드는 걸로 바꿔줘봤다.

def solution(N, stages):
    answer = [0]*(N+2)
    n_answer = {}
    counts = [0]*(N+2)
    for stage in stages:
        for j in range(1,stage+1):
            answer[j] += 1
        counts[stage] += 1
    answer[N+1],answer[0] = 0, 0
                    
    for i in range(1,N+1):
        if counts[i] ==0 or stages[i]==0:
            n_answer[i] = 0
        else:
            n_answer[i] = counts[i]/answer[i]
    print(n_answer)

    n_answer = dict(sorted(n_answer.items(), key=lambda x:x[1],reverse = True))

    answer = list(n_answer.keys())
    return answer

테스트 5,9번은 해결되었는데 나머지는 아직 런타임 오류가 났다. 

테스트 27은 n이 1일때이었어서 그  조건시 바로 반환해주는 코드를 작성해서 해결했다.

다시 살펴보니 내가 코드를 바꿔쓰다가 answer[i] == 0을 stages[i]==0으로 잘 못 작성한 걸 발경했다. 헷갈리지않게 주석 다는 습관을 들여야지....아래는 수정한 코드이다.

def solution(N, stages):
    answer = [0]*(N+2) #지나간 사람들 수 리스트
    n_answer = {} #실패율담는딕셔너리
    counts = [0]*(N+2) #머무는 사람들 수
    
    if N == 1: #1일경우 바로 반환하기
        answer[0] = N
        return answer[0:1]
    
    for stage in stages:
        for j in range(1,stage+1):
            answer[j] += 1
        counts[stage] += 1
    answer[N+1],answer[0] = 0, 0
                    
    for i in range(1,N+1):
        if counts[i] ==0 or answer[i]==0:#잘못작성한 부분..
            n_answer[i] = 0
        else:
            n_answer[i] = counts[i]/answer[i]

    n_answer = dict(sorted(n_answer.items(), key=lambda x:x[1],reverse = True))

    answer = list(n_answer.keys())
    return answer

 

 

728x90
반응형