< ์‹คํŒจ์œจ >

๋ ˆ๋ฒจ : 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;
}