티스토리 뷰

문제 링크입니다 : programmers.co.kr/learn/courses/30/lessons/42889

 

코딩테스트 연습 - 실패율

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

programmers.co.kr

 

간단한 정렬 + 구현문제였다.

 

문제에서 0으로 나누게 되는 경우가 있는데, 이걸 고려하지 않아서 한 5분 정도 생각했던것 같다.

 

정수를 0으로 나누면 런타임 에러가 나지만 0.0으로 나누니 inf라는 결과가 나왔다.. 몰랐다.. 지금까지

 

 

나누기를 할 때 나누는 수가 0이 되는 경우가 없는지 습관적으로 생각해두자.

 

 

 

 

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

bool compare(pair<double, int>& a, pair<double, int>& b) {
    if(a.first == b.first) {
        return a.second < b.second;
    }
    return a.first > b.first;
}

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<int> onStage(N + 1, 0);
    vector<int> passNum(N + 1, 0);
    
    for(int i = 0; i < stages.size(); i++) {
        int a = stages[i];
        
        if(a != N + 1) {
            onStage[a]++;
        }
        for(int j = 1; j <= a; j++) {
            passNum[j]++;
        }
    }
    
    vector<pair<double, int>> result;
    for(int i = 1; i <= N; i++) {
        double failRate;
        if(passNum[i] != 0) {
            failRate = (double)onStage[i]/(double)passNum[i];
        } else {
            failRate = 0.0;
        }
        // cout << i << "번째 스테이지 : " << onStage[i] << " / " << passNum[i] << endl;
        result.push_back({failRate, i});
    }
    
    sort(result.begin(), result.end(), compare);
    
    for(int i = 0 ; i < result.size(); i++) {
        answer.push_back(result[i].second);
    }
    
    return answer;
}

 

 

 

개발 환경 : vscode

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
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
글 보관함