반응형
https://programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
나의 풀이
function solution(N, stages) {
const objList = [];
let object = {};
for (let i = 1; i <= N; i++) {
if (stages.includes(i)) {
object['fail'] = stages.filter(stge => stge === i).length / stages.length;
object['stage'] = i;
stages = stages.filter(val => val !== i);
objList.push(object);
object = {};
continue;
}
object['fail'] = 0;
object['stage'] = i;
objList.push(object);
object = {};
}
return objList.sort((a, b) => b.fail - a.fail).map(stg => stg.stage);
}
배열에 해당 스테이지가 있다면 해당 스테이지의 실패율을 계산하였다.
그리고 객체에 실패율과 스테이지 번호를 저장하고 이를 다시 배열에 push 하였다.
배열에 스테이지가 없는 경우 실패율은 0으로 고정하고 객체에 저장하여 리스트에 push 한다.
반복문이 끝나면 오브젝트 리스트를 sort 하여 실패율 순서로 정렬한다.
실패율이 같은 경우 작은 숫자부터 정렬하는 조건이 있는데,
1부터 오름차순으로 반복문이 진행되었기 때문에 실패율이 같아도 조건을 충족할 수 있다.
마지막으로 map을 활용하여 스테이지 번호로 변환시켜주었다.
테스트 통과 후 코드 수정
테스트에서 처리 속도를 줄여주진 않았지만, 코드를 줄여보았다..!
function solution(N, stages) {
const objList = [];
for (let i = 1; i <= N; i++) {
if (stages.includes(i)) {
objList.push({'stage': i, 'fail': stages.filter(stge => stge === i).length / stages.length});
stages = stages.filter(val => val !== i);
continue;
}
objList.push({'stage': i, 'fail': stages.filter(stge => stge === i).length / stages.length});
}
return objList.sort((a, b) => b.fail - a.fail).map(stg => stg.stage);
}
objList에 객체를 넣을 때 그냥 중괄호를 사용하여 넣으면 굳이 object를 선언하지 않아도 된다.
간단한 사실이지만 그렇게 하지 못했다! 그렇게 하도록 하자!
반응형
'IT > Algorithm' 카테고리의 다른 글
프로그래머스) 문자열 내 마음대로 정렬하기 (0) | 2021.10.25 |
---|---|
프로그래머스) 소수 찾기 (0) | 2021.10.25 |
프로그래머스) 오픈채팅방 (0) | 2021.10.21 |
프로그래머스) x만큼 간격이 있는 n개의 숫자 (0) | 2021.10.21 |
프로그래머스) 콜라츠 추측 (0) | 2021.10.21 |