어흥
[프로그래머스] 복서 정렬하기 (C++) 본문
728x90
반응형
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/85002
1. 주의할 점
- 승률을 소수점도 포함한다
- 승률을 계산할 때, 이긴횟수와 진 횟수를 통해 계산한다(N 포함x)
2. 구현
- Info 구조체를 통해 각 정보를 저장한다
- Cmp operator를 통해 우선순위큐의 정렬 방법을 설정한다
- 각 선수들의 정보를 계산하여 우선순위큐에 넣고, 다 끝났으면 1개씩 빼면서 Answer 벡터에 순위를 저장한다
#include <string>
#include <vector>
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
struct info{
float winRate = 0.0f;
int winHeavyPlayer,weight,idx;
};
struct cmp{
bool operator()(info &a, info &b){
if(a.winRate==b.winRate){
if(a.winHeavyPlayer==b.winHeavyPlayer){
if(a.weight==b.weight) return a.idx > b.idx;
return a.weight < b.weight;
}
return a.winHeavyPlayer < b.winHeavyPlayer;
}
return a.winRate < b.winRate;
}
};
vector<int> solution(vector<int> weights, vector<string> head2head) {
vector<int> answer;
priority_queue<info,vector<info>,cmp> pq;
int num = head2head.size();
for(int i=0;i<num;i++){
string str = head2head[i];
int win = 0;
int lose = 0;
int heavyPlayer = 0;
for(int j=0;j<str.size();j++){
char c = str[j];
if(c=='W'){
win++;
if(weights[i]<weights[j]) heavyPlayer++;
}
else if(c=='L') lose++;
}
float rate;
if(win+lose==0) rate=0;
else rate = (float)win/(win+lose);
pq.push({rate,heavyPlayer,weights[i],i});
}
int cnt=1;
while(!pq.empty()){
answer.push_back(pq.top().idx+1);
pq.pop();
}
return answer;
}
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 메뉴 리뉴얼 (C++) (0) | 2021.09.10 |
---|---|
[프로그래머스] 신규 아이디 추천 (C++) (0) | 2021.09.10 |
[프로그래머스] 직업군 추천하기 (C++) (0) | 2021.08.31 |
[프로그래머스] 미로 탈출 (C++) (1) | 2021.08.31 |
[프로그래머스] 퍼즐 조각 채우기 (C++) (0) | 2021.08.30 |
Comments