https://programmers.co.kr/learn/courses/30/lessons/42889
문제:
슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다.
이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라.
- 실패율은 다음과 같이 정의한다.
- 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라.
총 문제의 숫자 크기에 따라, for문을 돌면서
스테이지에 도달한 플레이어의 수 ( 도달한 스테이지가 해당 스테이지보다 크거나 같은 경우)와 실패한 플레이어의 수( 도달한 스테이지가 해당 스테이지와 같은 경우) 로 계산하여 index(몇번째 문제)와 value(실패율)를 담은 object 타입의 array를 만들었다.
그리고, sort를 사용해 value로 오름차순 정렬 후, index의 값을 배열로 return 해 주는 방법을 사용했다.
function solution(N, stages) {
let answer = [];
for(let i=0; i<N; i++){
let newArr = stages.filter((value)=>{
if(i+1<=value) return value; // 스테이지에 도달한 플레이어 수
})
let newArr2 = stages.filter((value)=>{
if(i+1===value) return value; // 실패한 플레이어 수
})
answer[i] = {index: i+1,
value: newArr2.length ===0 ? 0 :
newArr2.length/newArr.length };
}
answer.sort((prevValue, value)=>{
return value.value - prevValue.value;
})
return answer.map((value)=>{
return value.index;
});
}
나는 object 타입의 객체를 사용해야 한다고만 생각을 했었는데, 2차원 배열을 사용한 케이스가 있어서 가져왔다.
코드 구성은 비슷한 것 같았는데 내 코드보다 빠르게 동작하는 것을 보고 차이점을 보고 분석해보았는데,
1. filter를 한 후 바로 length를 구해서.
2. push를 통해 array에 값을 넣었기 때문.
인듯 하다.
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]);
}
실제로 속도를 비교하는 글을 찾아본 결과 array[i]에 직접 넣는 경우보다 array.push()를 통해 배열에 값을 넣는 것의 성능이 더 높다는 것을 알게 되었다.
'javascript > 프로그래머스' 카테고리의 다른 글
[코딩테스트 연습]level 1. 완주하지 못한 선수 - 코드분석 (0) | 2022.07.06 |
---|---|
[코딩테스트 연습]level 1. 완주하지 못한 선수 (0) | 2022.07.04 |
[코딩테스트 연습]level 1. 예산 (0) | 2022.06.27 |
[코딩테스트 연습]level 1. K번째수 (0) | 2022.06.23 |
[코딩테스트 연습]level 1. 없는 숫자 더하기 (0) | 2022.06.22 |
댓글