본문 바로가기
문제풀이/프로그래머스

실패율 / 프로그래머스 연습문제 / programmers / level1 / javascript

by RUCKUS 2021. 5. 15.

programmers.co.kr/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr

이번문제는 2019 카카오 블라인드 채용 문제중 하나였던 실패율 이다.

이번에 카카오 코테봤는데...이정도 난이도면 나도 붙었을 수 있을 것 같다...라고 자만해본다.

 

이게 가장 쉬운문제였겠지 아마?..ㅠ

 

하여튼!

 

level1이라서 어렵지 않게 풀었다.

 

이제 이정도는 어떤 흐름으로 답을 구해야할지는 감이 온다. 다만 효율성면이나 메소드, 표현식 등은 더 공부해야하겠지만....갈길이 멀구나 ㅠㅠ

 

[알고리즘 Flow]

1. 사용자의 수 만큼 반복문 사용, 그리고 그 수 만큼 2중 반복문 사용

2. 현재 스테이지와 배열의 해당 사용자의 스테이지가 같다면, 실패횟수를 ++해준다.

3. 실패횟수가 모두 더해지면 현재 유저수를 실패횟수로 나눈 값을 실패율로 저장해준다.

4. 그리고 현재 유저수를 실패횟수 만큼 빼준다.

5. 위의 작업을 유저수만큼 반복 후 answer 배열에 담아 출력한다.

 

 

 

[나의 코드]

function solution(N, stages) {
    var answer = [];
    
    let res = [];
    let fail;
    // 실패 횟수
    let rank;
    // 실패 율
    let user = stages.length;
    // 유저의 수
    for (let i = 0; i < N; i++) {
        
        let row = new Object();
        // 로우 데이터 객체
        let now = i+1;
        // 현재 스테이지
        
        fail = 0;
        rank = 0;
        // 실패수와 실패율 초기화
        for (let j = 0; j < stages.length; j++) {
            
            if (now == stages[j]) {
            // 현재 스테이지와 도전중인 스테이지가 같다면
                fail++;
                // 실패 횟수 ++
            }
            
        }
        row.stage = now;
        
        rank = fail / user;
        // 현재 유저의 수를 실패의 수로 나눈다
        
        if (rank > 1) {
            rank = 1;
        }
        // 만약 실패율이 100%넘어가면 그냥 100%로 해준다.
        
        row.fail = rank;
        res.push(row);
        
        user -= fail;
        // 실패한 수만큼 유저수에서 뺀다. 아직 다음 스테이지에 못갔으니
        
    }
    
    res.sort(function(a, b) {
        
        return b.fail - a.fail;
        // 실패율을 내림차순으로 정렬한다.
    })
    
    
    for (var i = 0; i < res.length; i++) {
        
        answer[i] = res[i].stage;
        // answer에 하나 넣어준다.
        
    }
    
    
    return answer;
}

 

끝!

 


[깃허브]

https://github.com/RUCKUSJERRY/practiceOfJava/blob/main/Prs_Pratice/src/com/level01/failrank.js

 

RUCKUSJERRY/practiceOfJava

Contribute to RUCKUSJERRY/practiceOfJava development by creating an account on GitHub.

github.com