반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42889#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from collections import Counter
from queue import PriorityQueue
def solution(N, stages):
counter = Counter(stages)
users = len(stages)
q = PriorityQueue()
result = []
for stage in range(1, N+1):
if counter[stage] == 0:
r = 0
else:
r = counter[stage] / users
q.put((-r, stage))
users -= counter[stage]
for _ in range(q.qsize()):
result.append(q.get()[1])
return result
Counter모듈과 우선순위 큐(PriorityQueue)를 사용하여 문제를 해결했습니다.
counter = Counter(stages)
users = len(stages)
q = PriorityQueue()
result = []
Counter(stages)로 스테이지별 도전 횟수를 확인합니다.
유저의 수(users)와 우선순위 큐(q), 결과를 담을 리스트(result)를 초기화해줍니다.
for stage in range(1, N+1):
if counter[stage] == 0:
r = 0
else:
r = counter[stage] / users
q.put((-r, stage))
users -= counter[stage]
N까지 스테이지를 확인하면서
스테이지에 도달한 유저가 없는 경우(counter[stage] == 0)에는 실패율(r)을 0으로 처리하고
그렇지 않은 경우에는 실패율을 구해줍니다.
그리고 우선순위 큐(q)에 스테이지와 실패율을 담아주는데
이때 실패율을 -r 을 하여 우선순위 큐(q)에 실패율을 기준으로 내림차순이 적용되게 해줍니다.
users를 스테이지에 도전한 유저 수 만큼 빼주어 users를 갱신해줍니다.
for _ in range(q.qsize()):
result.append(q.get()[1])
return result
내림차순으로 정렬되어 있는 q에서 stage만 추출하여 결과를 반환해줍니다.
반응형
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 피로도 파이썬(Python) (0) | 2022.11.25 |
---|---|
[코딩테스트] 프로그래머스 중성화 여부 파악하기 MySQL (0) | 2022.11.24 |
[코딩테스트] 프로그래머스 카펫 파이썬(Python) (0) | 2022.11.24 |
[코딩테스트] 프로그래머스 경기도에 위치한 식품창고 목록 출력하기 MySQL (0) | 2022.11.23 |
[코딩테스트] 프로그래머스 [1차] 캐시 파이썬(Python) (2) | 2022.11.23 |