문제
https://school.programmers.co.kr/learn/courses/30/lessons/42889?language=python3
설계
- 실패한 stage에 있는 사람 수 만큼 다음 stage에 진출하는 사람이 적어진다.
- 확률보다 순서대로 sort하는데 애먹었다. 값에 index를 부여하기 위해 2중 for문으로 만든 후 sort 작업을 진행했다. (lamda로 sort하는 방식은 자주 사용하지 않아 어색하다)
- 런타임 에러가 발생했다. 만약 5 스테이지까지 있다고 가정했을 경우 4스테이지에서 모두 탈락해버린다면 5스테이지에서 people이 0, 즉 zero divison이 발생하기 때문에 0 이상의 if 문을 적용했다.
Python
def solution(N, stages):
bucket = [0] * (N+1)
people = len(stages)
for i in range(1, N+1):
cnt = stages.count(i) # 단계별 통과하지 못한 사람 count
if people > 0: # 만약 모두 탈락한 경우 zero divison 방지
bucket[i] = cnt / people
people -= cnt # 실패한 사람만큼 다음 진출자는 줄어든다.
bucket2 = [[i, bucket[i]] for i in range(N+1)] # index를 구하기 위한 2중 for문
bucket2.pop(0) # 0 스테이지는 없음
bucket2.sort(key=lambda x:x[1], reverse=True)
answer = []
for index in bucket2:
answer.append(index[0])
return answer
JavaScript
function solution(N, stages) {
const bucket = [];
// 실패율 계산
for (i = 0; i < N; i++) {
const num = 0;
let cnt = 0;
let cntTotal = 0;
for (j = 0; j < stages.length; j++) {
if (stages[j] >= i + 1) {
cntTotal += 1;
}
if (stages[j] == i + 1) {
cnt += 1;
}
}
// 문모가 0이될 경우 방지
if (cntTotal == 0) {
cntTotal = 1;
}
bucket.push(cnt / cntTotal);
}
const answer = [];
for (i = 0; i < N; i++) {
const max = Math.max(...bucket);
const index = bucket.indexOf(max);
answer.push(index + 1);
bucket[index] = -1;
}
return answer;
}
'PS (Problem Solving) > Programmers' 카테고리의 다른 글
[프로그래머스] [1차] 다트 게임 (0) | 2022.08.11 |
---|---|
[프로그래머스] 없는 숫자 더하기 (0) | 2022.08.10 |
[프로그래머스] 음양 더하기 (0) | 2022.08.08 |
[프로그래머스] 내적 (0) | 2022.08.08 |
[프로그래머스] 완주하지 못한 선수 (0) | 2022.08.07 |