티스토리 뷰
성공 코드(내 코드)
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(int N, vector<int> stages) {
vector<int> answer, visited(N, 0);
vector<double> failure, tmp;
for(int i=1; i<=N; i++){
double a=0, b=0;
for(int j=0; j<stages.size(); j++){
if(stages[j]>=i){
b+=1;
}
if(stages[j]==i){
a+=1;
}
}
if(a==0){
failure.push_back(0);
tmp.push_back(0);
} else{
failure.push_back(a/b);
tmp.push_back(a/b);
}
}
sort(failure.begin(), failure.end());
for(int i=N-1; i>=0; i--){
for(int j=0; j<N; j++){
// 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 하기 위해 j는 0부터 시작
if(failure[i]==tmp[j] && visited[j]==0){
answer.push_back(j+1);
visited[j]=1;
}
}
}
return answer;
}
다른 풀이 코드
- pair를 이용한 비교 함수 cmp 작성
- auto 사용
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(const pair<double,int>&a, const 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<pair<double,int>> fail;
for(int i=1;i<=N;i++){
double a=0,b=0;
for(int j=0;j<stages.size();j++){
if(stages[j]==i) a+=1;
if(stages[j]>=i) b+=1;
}
if(b!=0)
fail.push_back(make_pair(a/b,i));
else if(b==0)
fail.push_back(make_pair(0,i));
}
sort(fail.begin(),fail.end(),cmp);
auto it=fail.begin();
for(it=fail.begin();it!=fail.end();it++)
answer.push_back(it->second);
return answer;
}
'알고리즘' 카테고리의 다른 글
[프로그래머스/c++] 완주하지 못한 선수 (0) | 2022.08.18 |
---|---|
[프로그래머스/c++] 체육복 (0) | 2022.08.16 |
[백준 2579번/c++] 계단 오르기 (0) | 2022.08.10 |
[백준 1149번/c++] RGB거리 (0) | 2022.08.10 |
[백준 11726번/c++] 2*n 타일링 (0) | 2022.08.10 |