[C++] ์คํจ์จ
< ์คํจ์จ >
๋ ๋ฒจ : 1
์ธ์ด: c++
๐๋ฌธ์ ๋ณด๊ธฐ
๐ถ ๋์ ํ์ด๋ฒ
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int N, vector<int> stages) {
vector<int> answer;
vector<int> delay(N+1,0); //์คํ
์ด์ง๋ณ ๋ฉ์ถฐ์๋ ์ธ์์
vector<int> clear(N+1,0); //์คํ
์ด์ง๋ณ ํด๋ฆฌ์ด ์ธ์์
vector<float> fail(N+1,0); //์คํจ์จ ์ ์ฅ
//์ธ์์ ๋๋ฉฐ delay ์ clear์ ์ ์ฅ
for(int i: stages)
{
if(i != N+1)
delay[i]++;
for(int j=1; j<i; j++)
clear[j]++;
}
//๊ทธ ํ ์คํจ์จ์ ๊ณ์ฐ, ๋ถ๋ชจ๊ฐ 0์ผ ๊ฒฝ์ฐ๋ ์คํจ์จ 0
for(int i=1; i<=N; i++)
{
if(delay[i] != 0)
fail[i] = (float)delay[i]/(float)clear[i];
else
fail[i] = 0;
}
//fail ๋ฐฐ์ด์ ๋น๊ตํ๋ฉฐ ๊ฐ์ฅ ์คํจ์จ์ด ๋์ ๋ฐฐ์ด์ index๋ฅผ answer์ ์ ์ฅ
//์ด๋ฏธ ๋ค์ด๊ฐ index๋ -1๋ก ์ฒ๋ฆฌํ์ฌ ๋ฐฐ์
for(int i=1; i<=fail.size(); i++)
{
int max = 1;
for(int j=1; j<=N; j++)
{
if(fail[max] < fail[j])
max = j;
}
if(fail[max] == -1) continue;
answer.push_back(max);
fail[max] = -1;
}
return answer;
}
์ด๋ ๊ฒ ํธ๋๋ฐ ์ด๋์ ๋ ๊ณ ๋ฏผ์ ๋ง์ด ํ๊ณ ํ์ด๋ธ ๋ค์ ๋ค๋ฅธ ํ์ด๋ฅผ ๋ดค๋๋ฐ..
๋ ๊น๋ํ๊ณ sort๋ฅผ ์ด์ฉํด์ ์ฝ๊ฒ ํธ๋ ๋ฐฉ๋ฒ์ด ์์ด ๊ฐ์ ธ์๋ค!
๐ถ ๋ค๋ฅธ ์ฌ๋์ ํ์ด
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//โ
pair๋ฅผ ์ด์ฉํด์ ์คํ
์ด์ง ์์น์ ์คํจ์จ์ ๋์์ ์ ์ฅํ๊ฒ ํต์ฌ์ธ๋ฏ!
//fail์ ์ ๋ ฌํ ํ ๋น๊ตํจ์๋ฅผ ํตํด ์ญ ๋ฝ์๋ด๊ธฐ..
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;
//ab์ด์ฉํด 1๊ฐ ์คํ
์ด์ง์ ๋ํด delay์ clear๋ฅผ ์ ์ฅ
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));
}
//์ํ
ํ ํ ์๋ถํฐ ์ญ ์
๋ ฅ.fail์ ์คํ
์ด์ง์ ๋์๋๋๋ก ์ ์ฅ๋์ด์๊ธฐ ๋๋ฌธ!
//it->second๋ก ์คํ
์ด์ง ๋ฒํธ์ ์ ๊ทผํ ์ ์๋๊ฒ ์ข์๋ฏํ๋ค.
//๋๋ ์คํจ์จ๊ณผ ๋ฒํธ๋ฅผ ๋ณ๊ฐ๋ก ๊ด๋ฆฌํด์ ์ ๋จน์๋๋ฐ ใ
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;
}