-
복서 정렬하기 C++프로그래머스(Programmers) 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 배열 정렬을 시행하였습니다.
반응형'프로그래머스(Programmers)' 카테고리의 다른 글
신규아이디 추천 (0) 2021.11.09 최소직사각형 (0) 2021.10.14 모음사전 C++ (0) 2021.10.07 상호 평가 (0) 2021.09.09 부족한 금액 계산하기 C++ (0) 2021.09.07