[프로그래머스] 실패율 (C++)

유지연·2024년 1월 2일
0

PS

목록 보기
16/16

👋 프로그래머스 <무지의 먹방 라이브> 풀이 코드 (TIL 240102)

정답 코드

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

using namespace std;
// 각 스테이지에 따른 실패율 -> pair(stage number, 실패율)

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

vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<int> progress(N+2);
    vector<pair<int, double>> fail;
    for (int i=0; i<stages.size(); i++) {
        progress[stages[i]] += 1;
    }
    
    int players_num = progress[N+1];
    for (int i=N; i>0; i--) {
        players_num += progress[i];
        if (players_num == 0) fail.push_back(make_pair(i, double(0)));
        else fail.push_back(make_pair(i, double(progress[i]) /double(players_num)));
    }
    
    sort(fail.begin(), fail.end(), cmp);
    
    for (int i=0; i<N; i++) {
        answer.push_back(fail[i].first);
    }
    
    return answer;
}

C++ int 형의 나눗셈

c++ 에서 나누기"/" 연산을 진행할 때 int/int를 하게 되면 결과값도 int이 되어 몫만 남게된다.

int a = 7;
int b = 3;
cout << a/b; 
결과값: 2

따라서 나눗셈의 결과값을 소수로 나타내고 싶다면 type 변환이 필요한데, 피연산자 중 적어도 하나를 double로 변환시켜주면 된다. 아래의 코드는 모두 동일하게 2.33333을 출력한다.
(기본적으로는 정수부분과 소수부분을 합쳐서 총 6자리만 출력하는 것 같다)

cout << double(a) / b;
cout << a / double(b);
cout << double(a) / double(b);

0으로 나누는 경우

나눗셈을 할 때 분모가 0인 상황 두 가지를 살펴보자.

만약 int형 0으로 나눗셈을 시도한다면 오류가 발생한다. 하지만 double형 0으로 나눗셈을 시도한다면 결과값은 inf로 출력된다. 따라서 이러한 예외처리를 똑바로 해주는 것이 중요하다!

profile
Keep At It

0개의 댓글