반응형
programmers.co.kr/learn/courses/30/lessons/42889#
1. 스테이지 별 실패율값을 구하고
2. 실패율 기준으로 정렬하여
3. 그 순서대로 스테이지 번호를 반환한다.
1.
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
bool cmp(const pair<int, double>& a, const pair<int, double>& b) {
if (a.second == b.second)
return a.first > b.first;
return a.second < b.second;
}
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
// 실패율 계산
vector<double>fail; // 각 stage별 실패율
sort(stages.begin(), stages.end());
int stageCnt = 1;
int start = 0;
bool f = false;
// 스테이지 별로 계산
for (int i = 1; i <= N; i++) {
f = false;
for (int j = 0; j < stages.size(); j++) {
if (stages[j] > i) {
fail.push_back(0);
break;
}
else if (stages[j] == i) {
start = j;
for (int k = j; k < stages.size(); k++) {
if (stages[k] > i) {
fail.push_back((double)(k - start) / (double)(stages.size() - start));
f = true;
break;
}
else if (k == stages.size() - 1) {
fail.push_back((double)(k + 1 - start) / (double)(stages.size() - start));
f = true;
break;
}
}
}
if (f)
break;
}
}
if (fail.size() < N)
while (fail.size() != N)
fail.push_back(0);
//map에 값 넣어주고
map<int, double> s;
for (int i = 0; i < fail.size(); i++)
s.insert({ i + 1, fail[i] });
//value값으로 정렬
vector<pair<int, double>> vec(s.begin(), s.end());
sort(vec.rbegin(), vec.rend(), cmp);
// ans vector에 삽입
for (int i = 0; i < vec.size(); i++)
answer.push_back(vec[i].first);
return answer;
}
2.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(const pair<int, double>& a, const pair<int, double>& b) {
if (a.second == b.second)
return a.first > b.first;
return a.second < b.second;
}
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
// 실패율 계산
vector<pair<int, double>>fail; // 각 stage별 실패율
sort(stages.begin(), stages.end());
int stageCnt = 1;
int start = 0;
bool f = false;
// 스테이지 별로 계산
for (int i = 1; i <= N; i++) {
f = false;
for (int j = 0; j < stages.size(); j++) {
if (stages[j] > i) {
fail.push_back({i, 0});
break;
}
else if (stages[j] == i) {
start = j;
for (int k = j; k < stages.size(); k++) {
if (stages[k] > i) {
fail.push_back( {i, (double)(k - start) / (double)(stages.size() - start)});
f = true;
break;
}
else if (k == stages.size() - 1) {
fail.push_back( {i,(double)(k + 1 - start) / (double)(stages.size() - start)});
f = true;
break;
}
}
}
if (f)
break;
}
}
// 없는값 0으로 넣어주고
if (fail.size() < N)
while (fail.size() != N)
fail.push_back({ fail.size()+1, 0});
//value값으로 정렬
sort(fail.rbegin(), fail.rend(), cmp);
// ans vector에 삽입
for (int i = 0; i < fail.size(); i++)
answer.push_back(fail[i].first);
return answer;
}
3.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(const pair<int, double>& a, const pair<int, double>& b) {
if (a.second == b.second)
return a.first > b.first;
return a.second < b.second;
}
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
// 실패율 계산
vector<pair<int, double>>fail; // 각 stage별 실패율
sort(stages.begin(), stages.end());
int stageCnt = 1;
int start = 0;
bool f = false;
int user = stages.size();
// 스테이지 별로 계산
for(int i = 1; i <= N; i++) {
double count = 0;
for(int j = 0; j < stages.size(); j++)
{
if(stages[j] == i)
count++;
}
if(count == 0)
fail.push_back({i,0});
else
fail.push_back({i, count / user});
user -= count;
}
//value값으로 정렬
sort(fail.rbegin(), fail.rend(), cmp);
// ans vector에 삽입
for (int i = 0; i < fail.size(); i++)
answer.push_back(fail[i].first);
return answer;
}
반응형
'IT > 알고리즘' 카테고리의 다른 글
57] 프로그래머스 기능개발 (0) | 2020.11.16 |
---|---|
56] 프로그래머스 크레인 인형뽑기 게임 (0) | 2020.11.13 |
54] 프로그래머스 3진법 뒤집기 (0) | 2020.10.21 |
53] 프로그래머스 이상한 문자 만들기 (0) | 2020.10.19 |
52] 프로그래머스 정수 제곱근 판별 (0) | 2020.10.15 |
댓글