보글보글 개발일지
반응형

문제

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

 

프로그래머스

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

programmers.co.kr

풀이

처음에 스테이지에 도달한 플레이어 수스테이지에 도달했으나 아직 클리어하지 못한 플레이어수를 if문을 통해 각각 구해주니 시간 초과가 떴다.

따라서 if문을 줄이고자, 실패한 유저만 계산하고, 스테이지에 도달한 플레이어 수는 처음 스테이지 길이에서 실패한 유저수를 빼주는 식으로 코드를 바꾸었더니 정답!

정렬을 연습하고자, lambda를 사용하였다.

lambda 사용법은, arr=sorted(arr,key = lambda x:-x[1]) 와 같은데, 이는, 이름없는 함수를 의미한다.

lambda 매개변수:결과
lambda x:x[1]

위와 아래는 동일한 의미이다.

def 함수이름(매개변수): return 결과
def func(x): return x[1]

코드

실패한 코드

#시간초과 뜬 코드
def solution(N, stages):
    answer = []
    arr = []
    for i in range(1,N+1): #N개의 스테이지에 대해 조사
        dodal = 0
        fail = 0
        fail_percent = 0
        for j in range(len(stages)): 
            if i<=stages[j]: #i번째 스테이지보다 크거나 같은 stages 구하기
                dodal+=1
            if i == stages[j]:
                fail+=1
            if dodal != 0:
                fail_percent = fail/dodal
        arr.append((i,fail_percent))
            
    arr=sorted(arr,key = lambda x:-x[1])
    for i in arr:
        answer.append(i[0])
    return answer

성공한 코드

#실패한 유저만 계산하고, 스테이지에 도달한 플레이어 수는 처음 스테이지 길이에서 실패한 유저수를 빼줌
def solution(N, stages):
    answer = []
    arr = []
    k = len(stages) #전체 사람의 수

    for i in range(1,N+1): #N개의 스테이지에 대해 조사
        fail = 0
        for j in range(len(stages)): 
            if i == stages[j]:
                fail+=1
        if fail != 0:
            fail_percent = fail/k
            arr.append((i,fail_percent))
        else:
            arr.append((i,0))
        k-= fail #실패 유저들을 빼서, 스테이지에 도달한 플레이어 수를 업데이트 해줌
            
    arr=sorted(arr,key = lambda x:-x[1])
    for i in arr:
        answer.append(i[0])
    return answer
반응형
profile

보글보글 개발일지

@보글

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!