728x90
내 풀이
- stages에 실패한 스테이지들이 적혀있다. 1스테이지에서 실패한 사람은 2스테이지부터는 도달하지 못한 것.
→ challenged(스테이지 도달 플레이어 수) 변수는 전체 사용자 수에서 시작해서 누적으로 뺐다.
→ failed(실패한 플레이어 수) 변수는 0으로 두고 매 스테이지마다 초기화하면서 셌다. - failure_rate(실패율)은 벡터에 실패율(double)과 스테이지(int)를 각각 key, value로 담았다.
- 실패율이 같을 때는 스테이지의 오름차순으로 정렬하고, 나머지는 내림차순으로 정렬하게 bool로 정해줬다.
- 해당 스테이지에 도달한 플레이어 수가 0일 때는 0으로 나눌 수 없으므로, 예외처리해서 failure_rate에 직접 0을 넣어줘야 했다.
pair를 새롭게 써보면서 여러 방면으로 응용할 수 있음과, sort에서 bool 함수로 정렬을 조정할 수 있음을 알았다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(pair<double, int>& a, pair<double, int>& b) {
if (a.first == b.first) return a.second < b.second;
else return a.first > b.first;
}
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
vector<pair<double, int>> failure_rate;
int challenged = stages.size();
for (int i = 0; i < N; i++) {
int failed = 0;
for (int j = 0; j < stages.size(); j++) {
if (stages[j] == i) challenged--;
if (stages[j] == i + 1) failed++;
}
if (challenged == 0) {
failure_rate.push_back({ 0, i+1 });
}
else {
failure_rate.push_back({ double(failed) / double(challenged), i+1 });
}
}
sort(failure_rate.begin(), failure_rate.end(), compare);
for (int i = 0; i < failure_rate.size(); i++) {
answer.push_back(failure_rate[i].second);
}
return answer;
}
1단계 치고 어렵다 했더니... 점수를 많이 줬다^.^
이제 1단계 첫페이지 끝!
'[C_C++]코딩테스트 연습 > [프로그래머스] level 1' 카테고리의 다른 글
[C++] 프로그래머스 - 비밀지도 (0) | 2021.07.21 |
---|---|
[C++] 프로그래머스 - 3진법 뒤집기 (0) | 2021.07.18 |
[C++] 프로그래머스 - 숫자 문자열과 영단어 (0) | 2021.07.16 |
[C++] 프로그래머스 - 약수의 개수와 덧셈 (0) | 2021.07.14 |
[C++] 프로그래머스 - 로또의 최고 순위와 최저 순위 (0) | 2021.07.13 |