티스토리 뷰
문제 링크입니다 : 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
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 무지의 먹방 라이브 (0) | 2020.09.10 |
---|---|
프로그래머스 - 후보키 (0) | 2020.09.10 |
프로그래머스 - 오픈채팅방 (0) | 2020.09.09 |
프로그래머스 - 블록 이동하기 (0) | 2020.09.09 |
프로그래머스 - 기둥과 보 설치 (0) | 2020.09.08 |
댓글