말랑한 하루
[Programmers] 실패율 (Lv 1, JavaScript) 본문
반응형
[ 학습 내용 ]
- indexOf() : 원소값이 제일 처음 존재하는 배열의 인덱스 반환, 없는경우 -1
- lastIndexOf() : 원소값이 제일 마지막에 존재하는 배열의 인덱스 반환, 없는경우 -1
현재 스테이지를 기준으로 다음과 같이 준비했다.
1) accum : 누적 플레이어 수 (clear로 갱신)
2) clear : 스테이지를 클리어 한 플레이어 수 (이전 스테이지의 마지막 index 활용, 단 존재하지 않는경우 accum 사용)
3) fail : 스테이지에 도달하였지만 클리어하지 못한 플레이어 수 (현재 스테이지 마지막 index - 처음 index 활용)
[ 소스 코드 ]
function solution(N, stages) {
var answer = [];
var failure = [];
for(var i=0; i<N; i++) {
failure[i]= {
"stage": i+1,
"failrate": 0,
}
}
stages.sort((o1, o2) => { return o2 - o1;});
var accum = 0;
for(var i=N; i>0; i--) {
let clear = stages.lastIndexOf(i+1);
accum = clear = clear == -1 ? accum : clear + 1;
let fail = stages.lastIndexOf(i) - stages.indexOf(i);
if (stages.lastIndexOf(i) !== -1) fail += 1;
failure[i-1].failrate = fail/(clear+fail);
}
failure.sort((o1, o2) => {
return o2.failrate === o1.failrate
? o1.stage - o2.stage
: o2.failrate - o1.failrate;
})
answer = failure.map((fail) => {return fail.stage;})
return answer;
}
[ 심화 코드 ]
function solution(N, stages) {
let result = [];
for(let i=1; i<=N; i++){
let reach = stages.filter((x) => x >= i).length;
let curr = stages.filter((x) => x === i).length;
result.push([i, curr/reach]);
}
result.sort((a,b) => b[1] - a[1]);
return result.map((x) => x[0]);
}
[ 코드 분석 ]
JS로 알고리즘을 풀 때, filter의 활용이 다양하고 빈도수가 잦았다. filter에 대한 활용이 익숙해질 수 있도록 해야겠다.
index와 크거나 같은 경우 스테이지에 도달한 플레이어 수
index와 같은 경우 스테이지에 도달하였지만 클리어하지 못한 플레이어 수를 나타내
간단하게 result에 index와 실패율을 담을 수 있었다.
반응형
'문제풀이 > Programmers' 카테고리의 다른 글
[Programmers] 문자열 압축 (Lv 2, JavaScript) (0) | 2022.07.08 |
---|---|
[Programmers] 비밀지도 (Lv 1, JavaScript) (0) | 2022.07.06 |
[Programmers] 크레인 인형뽑기 게임 (Lv 1, JavaScript) (0) | 2022.07.06 |
[Programmers] 키패드 누르기 (Lv 1, JavaScript) (0) | 2022.06.30 |
[Programmers] 숫자 문자열과 영단어 (Lv 1, JavaScript) (0) | 2022.06.29 |
Comments