https://school.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스 실패율 문제

# 초안 ( 런타임 에러 발생. )
def solution(N, stages):
answer = []
stage_maps = {}
for i in range(1, N+1, +1):
challenger = [num for num in stages if num >= i]
failure = [num for num in stages if num == i]
failure_rate = len(failure) / len(challenger)
stage_maps[i] = failure_rate
# print(f' 도전자 : {challenger} , 실패자 : { failure} , 실패율 : {failure_rate} , 딕셔너리 체크 : {stage_maps}' )
# 내림차순 밸류값 기준 정렬.
sorted_dict = dict(sorted(stage_maps.items(), key=lambda item: item[1] , reverse=True))
return list(sorted_dict.keys())
0으로 나누는 케이스를 처리하지 않을 경우 런타임 에러가 난다.

따라서 division by zero 에러 처리를 해줘야 한다.
def solution(N, stages):
stage_maps = {}
for i in range(1, N+1, +1):
challenger = [num for num in stages if num >= i]
failure = [num for num in stages if num == i]
if len(challenger) != 0:
failure_rate = len(failure) / len(challenger)
else:
failure_rate == 0
stage_maps[i] = failure_rate
# 내림차순 밸류값 기준 정렬.
sorted_dict = dict(sorted(stage_maps.items(), key=lambda item: item[1] , reverse=True))
return list(sorted_dict.keys())
다음은 다른 사람이 푼 더 간결한 풀이다.

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
return sorted(result, key=lambda x : result[x], reverse=True)
스테이지에 대한 계산이 한 차례 줄어서 내가 짠 코드 보다 더 빠른 듯 싶다.
🥸 파이썬에 익숙치 않아서 파이썬스러운 코드가 아닐 수도 있습니다.
🤨 이상한 점이 있다면 댓글 부탁드립니다.
'ALGORITHM' 카테고리의 다른 글
[python3] 2022 KAKAO BLIND RECRUITMENT신고 결과 받기 (0) | 2023.05.08 |
---|---|
[python3] 2023 KAKAO BLIND RECRUITMENT 개인정보 수집 유효기간 (0) | 2023.05.08 |
백준 1012 유기농 배추 (0) | 2023.01.03 |
[피보나치 수열] 재귀호출, 배열 (1) | 2022.11.19 |
[이진 탐색] Binary Search Algorithm (0) | 2022.11.18 |
https://school.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스 실패율 문제

# 초안 ( 런타임 에러 발생. )
def solution(N, stages):
answer = []
stage_maps = {}
for i in range(1, N+1, +1):
challenger = [num for num in stages if num >= i]
failure = [num for num in stages if num == i]
failure_rate = len(failure) / len(challenger)
stage_maps[i] = failure_rate
# print(f' 도전자 : {challenger} , 실패자 : { failure} , 실패율 : {failure_rate} , 딕셔너리 체크 : {stage_maps}' )
# 내림차순 밸류값 기준 정렬.
sorted_dict = dict(sorted(stage_maps.items(), key=lambda item: item[1] , reverse=True))
return list(sorted_dict.keys())
0으로 나누는 케이스를 처리하지 않을 경우 런타임 에러가 난다.

따라서 division by zero 에러 처리를 해줘야 한다.
def solution(N, stages):
stage_maps = {}
for i in range(1, N+1, +1):
challenger = [num for num in stages if num >= i]
failure = [num for num in stages if num == i]
if len(challenger) != 0:
failure_rate = len(failure) / len(challenger)
else:
failure_rate == 0
stage_maps[i] = failure_rate
# 내림차순 밸류값 기준 정렬.
sorted_dict = dict(sorted(stage_maps.items(), key=lambda item: item[1] , reverse=True))
return list(sorted_dict.keys())
다음은 다른 사람이 푼 더 간결한 풀이다.

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
return sorted(result, key=lambda x : result[x], reverse=True)
스테이지에 대한 계산이 한 차례 줄어서 내가 짠 코드 보다 더 빠른 듯 싶다.
🥸 파이썬에 익숙치 않아서 파이썬스러운 코드가 아닐 수도 있습니다.
🤨 이상한 점이 있다면 댓글 부탁드립니다.
'ALGORITHM' 카테고리의 다른 글
[python3] 2022 KAKAO BLIND RECRUITMENT신고 결과 받기 (0) | 2023.05.08 |
---|---|
[python3] 2023 KAKAO BLIND RECRUITMENT 개인정보 수집 유효기간 (0) | 2023.05.08 |
백준 1012 유기농 배추 (0) | 2023.01.03 |
[피보나치 수열] 재귀호출, 배열 (1) | 2022.11.19 |
[이진 탐색] Binary Search Algorithm (0) | 2022.11.18 |