문제) 프로그래머스 - 2019 카카오 공채 - 실패율
-> 코딩테스트 연습 - 실패율 | 프로그래머스 (programmers.co.kr)
① 나의 풀이
관찰을 하다 보면 플레이어가 도달한 스테이지( j )와 해당 스테이지( i )를 비교하여 실패율을 계산하여 실패율과 해당 스테이지를 result 리스트에 넣어준다.
플레이어가 도달한 스테이지가 해당 스테이지보다 높은 경우( j > i ):
플레이어는 스테이지에 도달했고 성공한 경우이므로 participant만 1을 늘린다.
플레이어가 도달한 스테이지가 해당 스테이지와 같은 경우( j > i ):
플레이어는 스테이지에 도달했지만 실패한 경우이므로 participant와 fail_count를 각각 1씩 늘린다.
해당 스테이지의 도달한 수가 0명일 경우( participant == 0 ):
participant가 0일 경우 실패율을 계산할 때 Zerodivisionerror가 발생한다. 이 예외는 try~except문을 이용해 처리한다. 문제에서 "스테이지에 도달한 유적 없는 경우 해당 스테이지 실패율은 0으로 정의한다"라고 했으므로 except문에서 result 리스트에 실패율을 0으로 추가한다.
마지막으로 실패율을 기준으로 내림차순 정렬하여 각 스테이지( i )를 answer 리스트에 추가한다.
일정 기준으로 정렬하기: 2021/02/27 - [Algorithm_note/Python] - [Python] sort(), sorted(), lambda
소스 코드)
def solution(N, stages): result = [] answer = [] for i in range(1, N + 1): participant = 0 fail_count = 0 for j in stages: if j > i: participant += 1 elif j == i: participant += 1 fail_count += 1 #participant = 0 일때의 처리 try: result.append((fail_count/participant, i)) except: result.append((0, i)) #내림차순 정렬 result.sort(key=lambda x: x[0], reverse=True) for i in result: answer.append(i[1]) return answer
② 다른 사람 풀이
⊙ Simple is Best
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)
내 풀이와 알고리즘은 같지만 아주 간단하게 해결하였다. 보기 좋은 떡이 먹기도 좋다고 코드가 간결할수록 눈으로 디버깅하기도 쉬워 오류를 빠르게 해결할 수 있다. 더 간단하게 최적화하도록 하자.
'PS(Problem Solving) > 프로그래머스_Programmers' 카테고리의 다른 글
[프로그래머스] 2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어 (파이썬) 문제 및 풀이 (0) | 2021.08.03 |
---|---|
[프로그래머스] 2021 Dev-Matching - 로또의 최고 순위와 최저 순위 (C++) 문제 및 풀이 (0) | 2021.06.03 |
[프로그래머스] 2019 카카오 공채 - 오픈채팅방 (파이썬) 문제 및 풀이 (0) | 2021.03.04 |
[프로그래머스] 2021 카카오 공채 - 메뉴 리뉴얼 (파이썬) 문제 및 풀이 (0) | 2021.02.06 |
[프로그래머스] 2021 카카오 공채 - 신규 아이디 추천 (파이썬) 문제 및 풀이 (0) | 2021.02.03 |
댓글