본문 바로가기
공부/프로그래머스

[프로그래머스] 42889번

by _음주토끼_ 2022. 8. 2.

문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/42889

 

프로그래머스

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

programmers.co.kr

 

간만에 코드 리뷰를 하는 것같다. 하지만 문제는 여전히 꼬박꼬박 풀고있다는 점.

그렇다. 블로그 작성에 게으른 나의 탓이다. 리뷰 할 코드가 산처럼 쌓이고있어서 밍기적 하나라도 쓴다. :) ...

 

2019년 카카오 블라인드 채용 코딩테스트로 출제된 문제다.

작성해야할 알고리즘이 차분하게 떠오르고 구현까지 큰 어려움을 겪지 않은 것을 보니,

아 이건 레벨 1짜리 문제구나 싶었다. ㅋㅋㅋㅋㅋㅋㅋ

자신감 낮은 게 아니라, 이게 문제를 풀다보니까 그냥 느낌이 있다!!

 

일단 실패율 식을 명확하게 떠올리고, 그에 따른 순서를 어떻게 정렬할지 생각했다.

내게 아주 효자같은 lambda를 이용했다.

lambda 정렬은 특정 원소뿐만 아니라 우선순위도 정할 수 있기 때문에 너무 편하다.

코테 공부를 시작할 땐 lambda의 l 자도 모르고 시작했는데 새삼 고인물(쉬운문제 한정)이 된걸 느낀다.

 

실패율과 함께 해당 스테이지 번호를 정보를 담을 배열에 append했다.

만약 스테이지에 도달한 유저가 없다면 실패율은 0이다.

즉, 저 코드 내에서 b가 0이거나 0 미만으로 갱신되면 실패율은 0이 되어야하므로 반복문 내에서 조건문을 써줬다.

 

조건에 알맞게 실패율에 대해서 정렬을 한 후에, 스테이지만을 추출하고싶어서 고민하다가 zip을 이용했다.

답을 도출하기 위해 필요한 것은 2차원이 된 fault 배열에서 각각의 원소 중 0번째이다.

그렇게 뽑아낸 리스트를 정답값으로 return하면 끝!

 

# 실패율 = (해당 스테이지 도전중(클리어X)) / (해당 스테이지 도달)

def solution(N, stages):
    
    fault = []
    b = len(stages)
    for i in range(1, N+1):
        # 실패율 = a / b
        if b <= 0:
            fault.append((i, 0))
        else:
            a = stages.count(i)
            fault.append((i, a/b))
            b -= a
    
    fault.sort(key = lambda x: (-x[1], x[0]))
    answer = list(zip(*fault))[0]
    
    return answer

 

'공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 42584번  (1) 2022.09.09
[프로그래머스] 81301번  (0) 2022.06.15
[프로그래머스] 12977번  (0) 2022.06.15
[프로그래머스] 86051번  (0) 2022.06.15
[프로그래머스] 59413번  (0) 2022.06.15