문제
프로그래머스 2019 KAKAO BLIND RECRUITMENT 실패율
https://programmers.co.kr/learn/courses/30/lessons/42889#
언어
자바스크립트(JavaScript)
접근 방법
- 각 단계에서 실패한 유저수를 해당 단계까지 도전한 누적 도전자 수를 나누어 실패율을 계산한다.
- 누적 도전자수는 전체수에서 각 단계에서 실패한 유저수를 빼면서 구한다.
- stage와 실패율을 가지는 객체를 배열에 저장한다.
- 배열을 정렬한다. 실패율을 내림차순으로 정렬하고 실패율이 같다면 stage 오름차순으로 정렬한다.
코드
function solution(N, stages) {
let arr = [];
let totalNum = stages.length;
for (let i=1; i<=N; i++){
// 현재 단계에서 실패한 유저수를 계산
// 현재까지의 누적 도전자수를 나누어 실패율 계산
// 현재까지의 누적 도전자수에 실패한 유저수 빼기
let stageNum = stages.filter(ele=> ele==i).length
let failRatio = 0;
if (stageNum===0){
failRatio = 0;
}else{
failRatio = (stageNum)/totalNum;
}
totalNum -= stageNum;
arr.push({idx:i,ratio:failRatio});
}
// 실패율 내림차순으로 정렬하고 실패율이 같다면 stage 오름차순으로 정렬
arr.sort((a,b)=>{
if(a.ratio>b.ratio){
return -1;
}else if (a.ratio<b.ratio){
return 1;
}else{
if(a.idx>b.idx){
return 1;
}else{
return -1;
}
}
})
return arr.map(ele=>ele.idx);
}
복기
- 문제 자체는 어렵지 않지만 filter와 sort를 사용하지 않고 해결하려면 코드가 복잡해진다. filter, sort 용법을 정확하게 미리 파악하고 있어야 한다.
'개발 공부 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 (JavaScript) (0) | 2020.06.04 |
---|---|
[프로그래머스] [1차] 다트 게임 (JavaScript) (0) | 2020.06.02 |
[프로그래머스] [1차] 비밀지도 (JavaScript) (0) | 2020.06.02 |
[프로그래머스] 후보키 (JavaScript) (4) | 2020.06.01 |
[프로그래머스] 기둥과 보 설치 (JavaScript) (0) | 2020.06.01 |