[프로그래머스] Lv.1 실패율

Miro·2022년 8월 17일
0
post-thumbnail

프로그래머스 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 < 0break;
        
        for(let j = 0; j < answer.length; j++) {
            if(answer[j] === a) {
                result.push(j+1);
                answer[j] = -1;
            }
        }
    }
    
    return result;
}
cs

먼저 빈 배열 answerN개 만큼 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_clearfailcount_reach는 다시 0을 할당하여 초기화 시켜준다.

현재 answer에는 각 스테이지별 실패율이 순서대로 할당되어 있다.

이중 반복문을 사용하여 바깥쪽 반복문은 i가 0부터 N까지, 안쪽 반복문은 j가 0부터 answer의 길이까지 반복한다.

바깥쪽 반복문에서 answer의 가장 큰 수를 찾아서 변수 a에 할당한다.
만약 a가 0보다 작으면 반복문을 종료한다.

안쪽 반복문에서 만약 answer[j]가 가장 큰 수 a와 같다면 빈 배열 resultj+1push 한다.
가장 큰 수였던 answer[j]는 0보다 작은 수인 -1로 재할당 해준다.

실패율이 높은 스테이지부터 할당 된 result를 return한다.

profile
프론트엔드 개발자(진)

0개의 댓글