반응형
해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다.
문제설명
하단의 프로그래머스 링크 문제이므로 하단의 링크를 참조하자.
https://programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
사고과정
- 이걸 어떻게 20분 내에..? 20분 내에 풀지 못해서 그냥 여유를 두고 풀었다. 1시간 정도 풀고 나름대로 작성을 해서 제출했지만 70/100점 밖에 맞지 못했다. 런타임 에러가 발생하는데, 시간 복잡도에서 문제가 발생하는 듯 했다. 결국 문제 풀이를 염탐했다..
- '정렬' 카테고리 문제여서 연습한 정렬 구현 코드에만 집중 했다. 뭐 삽입, 선택, 퀵, 계수 정렬 등등.. 그런데 풀이를 보니 여기서는 파이썬 정렬 라이브러리를 활용했다. 최근에 소스코드 구현만 연습해서 그런지 파이썬 정렬 라이브러리에 익숙하지 않았다. count, find, startswith, endswith 등등.. 이걸 사용할 거라곤 상상도 못했다..
- N개의 스테이지 이므로 1~N까지 loop를 돌면서 실패율을 계산하자는 아이디어는 일치했는데, 1부터 하나씩 증가하면서 실패율을 계산하는 데 활용하는 분모 업데이트 하는 아이디어가 떠오르지 않았다. 책 풀이를 보면 1일 때 length를 계속적으로 업데이트 해주되 이 때, length에서 당시 loop 차례에서 count한 개수를 빼주도록 한 점이 매우 인상적이었다.. 하 카카오 문제는 너모 어려운 듯 하다..
- 마지막으로 주어진 stages 배열 길이가 0이라는 반례도 생각하지 못했다.. 고려해야 할 경우의 수가 너무 많다..
풀이(스스로 풀지 못함)
def solution(N, stages):
length = len(stages)
result = []
for i in range(1, N+1):
count = stages.count(i)
if length == 0:
fail = 0
else:
fail = count / length
length -= count
result.append((i, fail))
result = sorted(result, key=lambda x: (-x[1], x[0]))
answer = [res[0] for res in result]
return answer
반응형
'알고리즘 삽질장' 카테고리의 다른 글
[이코테] 다이나믹프로그래밍 - 금광 (0) | 2021.09.29 |
---|---|
[이코테] 이진 탐색 - 고정점 찾기 (0) | 2021.09.28 |
[이코테] 정렬 - 안테나 (0) | 2021.09.28 |
[이코테] DFS - 연구소 (0) | 2021.09.27 |
[이코테] 구현 - 문자열 압축 (0) | 2021.09.26 |