문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/42889
간만에 코드 리뷰를 하는 것같다. 하지만 문제는 여전히 꼬박꼬박 풀고있다는 점.
그렇다. 블로그 작성에 게으른 나의 탓이다. 리뷰 할 코드가 산처럼 쌓이고있어서 밍기적 하나라도 쓴다. :) ...
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 |