프로그래머스 Lv.1 실패율
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | function solution(N, stages) { let answer = []; let count_clearfail = 0; let count_reach = 0; let result = []; // answer에 N개 만큼 0으로 채우기 for(let i = 0; i < N; i++) { answer.push(0); } // 실패율 구해서 라운드별로 answer에 할당 for(let i = 1; i <= N; i++) { for(let j = 0; j < stages.length; j++) { if(stages[j] >= i) { count_reach++; } if(stages[j] === i) { count_clearfail++; } if(count_reach === 0) answer[i-1] = 0; else answer[i-1] = count_clearfail / count_reach; } count_clearfail = 0; count_reach = 0; } // 실패율이 큰 순서대로 result에 push for(let i = 0; i < N; i++) { let a = Math.max(...answer); if(a < 0) break; for(let j = 0; j < answer.length; j++) { if(answer[j] === a) { result.push(j+1); answer[j] = -1; } } } return result; } | cs |
먼저 빈 배열
answer
에N
개 만큼 0으로 채워준다.이중 반복문을 사용하여 바깥쪽 반복문은
i
가 1부터N
까지, 안쪽 반복문은j
가 0부터stages
의 길이까지 반복한다.만약
stages[j]
가i
보다 크거나 같으면 스테이지에 도달한 수인count_reach
에 1 더해준다.
만약stages[j]
가i
와 같다면 스테이지를 아직 성공하지 못한 수인count_clearfail
에 1 더해준다.만약
count_reach
가 0이라면 (스테이지에 도달한 사람이 없다면)answer[i-1]
에는 0을 할당한다.
그렇지 않다면answer[i-1]
에는 실패율을 구하는 공식count_clearfail / count_reach
을 할당한다.안쪽 반복문이 종료되면
count_clearfail
와count_reach
는 다시 0을 할당하여 초기화 시켜준다.현재
answer
에는 각 스테이지별 실패율이 순서대로 할당되어 있다.이중 반복문을 사용하여 바깥쪽 반복문은
i
가 0부터N
까지, 안쪽 반복문은j
가 0부터answer
의 길이까지 반복한다.바깥쪽 반복문에서
answer
의 가장 큰 수를 찾아서 변수a
에 할당한다.
만약a
가 0보다 작으면 반복문을 종료한다.안쪽 반복문에서 만약
answer[j]
가 가장 큰 수a
와 같다면 빈 배열result
에j+1
을push
한다.
가장 큰 수였던answer[j]
는 0보다 작은 수인 -1로 재할당 해준다.실패율이 높은 스테이지부터 할당 된
result
를 return한다.