728x90
728x90
- sort 함수를 사용하기 위해서 벡터 함수 안에 모든 값을 저장하였다. {{선수의 몸무게, idx 값},{ 승률,자신의 몸무게보다 큰 선수를 이긴 횟수}}
- 비교함수에 따른 sort를 하였다. 승률이 같지 않으면 승률에 따른 정렬. 승률이 같으면 자신의 몸무게보다 큰 선수를 이긴 횟수가 같지 않으면 그에 따른 정렬..... 마지막 idx 값이 작은 순으로 정렬.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(pair<pair<int,int>,pair<double,int>> p1,pair<pair<int,int>,pair<double,int>> p2)
{
if(p1.second.first == p2.second.first)
{
if(p1.second.second == p2.second.second)
{
if(p1.first.first == p2.first.first) return p1.first.second < p2.first.second;
return p1.first.first > p2.first.first;
}
return p1.second.second > p2.second.second;
}
return p1.second.first > p2.second.first;
}
vector<int> solution(vector<int> weights, vector<string> head2head) {
vector<int> answer;
vector<pair<pair<int,int>,pair<double,int>>> player;
for(int i=0 ;i <weights.size() ; i++) player.push_back({{weights[i],i+1},{0,0}});
for(int i=0,total= weights.size(); i<head2head.size(); i++,total= weights.size())
{
string s = head2head[i];
double win = 0,win_over_weight= 0,my_weight = player[i].first.first;
for(int j=0; j< s.length(); j++)
{
if(s[j] == 'N') total--;
if(s[j] == 'W')
{
if(my_weight < player[j].first.first) win_over_weight++;
win ++;
}
else continue;
}
if(total == 0) player[i].second = {0,win_over_weight};
else player[i].second = {win / total,win_over_weight};
}
sort(player.begin(),player.end(),compare);
for(auto p : player) answer.push_back(p.first.second);
return answer;
}
728x90
728x90
'Language > C++' 카테고리의 다른 글
[c++][백준 2146][BFS] 다리 만들기 - 컴도리돌이 (0) | 2021.11.21 |
---|---|
[프로그래머스][level2][C++][BFS] 찾아라 프로그래밍 마에스터 - 게임 맵 최단거리 - 컴도리돌이 (0) | 2021.09.10 |
[프로그래머스][위클리 챌린지-5주차] [DFS] 5주차_모음사전 - 컴도리돌이 (0) | 2021.09.09 |
[프로그래머스][level2][c++] 2021 KAKAO BLIND RECRUITMENT - 순위 검색 - 컴도리돌이 (0) | 2021.08.27 |
[프로그래머스][Level3][c++][플로이드와샬] 2021 KAKAO BLIND RECRUITMENT - 합승 택시 요금 - 컴도리돌이 (1) | 2021.08.27 |