프로그래머스(Programmers)
복서 정렬하기 C++
cosmohoo
2021. 10. 7. 23:25
반응형
입출력 예
weightshead2headresult
[50,82,75,120] | ["NLWL","WNLL","LWNW","WWLN"] | [3,4,1,2] |
[145,92,86] | ["NLW","WNL","LWN"] | [2,3,1] |
[60,70,60] | ["NNN","NNN","NNN"] | [2,1,3] |
입출력 예 #1
- 다음은 선수들의 정보를 나타낸 표입니다.
선수 번호vs 1번vs 2번vs 3번vs 4번승률자기보다 무거운 복서를 이긴 횟수몸무게
1번 | - | 패배 | 승리 | 패배 | 33.33% | 1회 | 50kg |
2번 | 승리 | - | 패배 | 패배 | 33.33% | 0회 | 82kg |
3번 | 패배 | 승리 | - | 승리 | 66.66% | 2회 | 75kg |
4번 | 승리 | 승리 | 패배 | - | 66.66% | 0회 | 120kg |
- 본문에 서술된 우선순위를 따라 [3,4,1,2] 를 return 합니다.
입출력 예 #2
- 다음은 선수들의 정보를 나타낸 표입니다.
선수 번호 vs 1번 vs 2번 vs 3번 승률 자기보다 무거운 복서를 이긴 횟수 몸무게
1번 | - | 패배 | 승리 | 50% | 0회 | 145kg |
2번 | 승리 | - | 패배 | 50% | 1회 | 92kg |
3번 | 패배 | 승리 | - | 50% | 1회 | 86kg |
- 본문에 서술된 우선순위를 따라 [2,3,1] 을 return 합니다
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct boxer
{
int weight=0;
double rateW=0.00;
int numW=0;//본인보다 무거운 애들 이긴 횟수
int num=0;
};
bool cmp(const boxer &B1, const boxer &B2)
{
if(B1.rateW > B2.rateW)
{
return true;
}
if(B1.rateW == B2.rateW)
{
if(B1.numW > B2.numW)
{
return true;
}
if(B1.numW == B2.numW)
{
if(B1.weight > B2.weight)
{
return true;
}
if(B1.weight == B2.weight)
{
if(B1.num < B2.num)
{
return true;
}
}
}
}
return false;
}
vector<int> solution(vector<int> weights, vector<string> head2head) {
vector<boxer> arr;
for(int i=0; i<weights.size(); i++)
{
boxer newB;
newB.weight = weights[i];//본인 무게 삽입
newB.num = i+1;
int numFight= 0;//총전적 횟수
int score =0; //이긴 횟수
int numHit =0; //나보다 무거운 애들 이긴 횟수
for(int j=0; j<head2head.size(); j++)
{
if(head2head[i][j] == 'W')
{
numFight++;
score++;
if(weights[i] < weights[j])//상대가 나보다 무거우면
{
numHit++;
}
}
else if(head2head[i][j] == 'L') numFight++;
}
if (numFight == 0) {newB.rateW = 0.00;}
else {newB.rateW = (double)score / (double)numFight;}//승률 삽입
newB.numW=numHit;
arr.push_back(newB);
}
sort(arr.begin(), arr.end(), cmp);
vector<int> answer;
for(int i=0; i<weights.size(); i++)
{
answer.push_back(arr[i].num);
}
return answer;
}
=> Boxer의 특성을 표현할 수 있는 구조체를 생성하였습니다.
=> 승률의 경우 소수점을 표현할 수 있도록 double으로 표현하였으며, 승률 계산 시(double) 변수 / (double) 변수를 하여 소수점을 표현할 수 있도록 하였습니다.
=> 승부를 겨뤄보지 않은 경우 0으로 나눠지는 경우가 있으므로 주의해야 합니다. (core dumped error)
=> algorithm 헤더에 포함되어 있는 sort 함수를 사용하여 boxer 배열을 정렬하였습니다.
=> sort함수의 경우 cmp 함수를 자체적으로 생성하여 내가 원하는 sort함수를 생성할 수 있습니다. cmp 함수를 생성하여 Boxer 배열 정렬을 시행하였습니다.
반응형