[プログラマー]6週目ソートボクサー
回答日:2021-09-19
質問する
名の選手から勝利率を求め、勝利時に相手選手の体重より体重の重い選手を選ぶ回数. 各選手は、選手番号、勝率、より重いボクサーに勝った回数、体重情報を保存する. で与えられた条件に従って並べ替えられ、並べ替えられた選手番号が返される. コード#コード#
質問する
質問リンク:https://programmers.co.kr/learn/courses/30/lessons/85002
アクセスと解析
次のようにコードを実現した.
次のようにコードを実現した.
コード#コード# #include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct boxer {
int num;
double win_rate;
int win_big_one;
int weight;
};
bool cmp(boxer a, boxer b) {
if (a.win_rate == b.win_rate) {
if (a.win_big_one == b.win_big_one) {
if (a.weight == b.weight) {
return a.num < b.num;
}
return a.weight > b.weight;
}
return a.win_big_one > b.win_big_one;
}
return a.win_rate > b.win_rate;
}
vector<int> solution(vector<int> weights, vector<string> head2head) {
vector<int> answer;
int len = weights.size();
vector<boxer> v;
for (int i = 0; i < len; i++) {
int total = 0, win = 0, upset = 0;
for (int j = 0; j < head2head[i].length(); j++) {
if (head2head[i][j] == 'W') {
win++;
total++;
if (weights[i] < weights[j]) {
upset++;
}
} else if (head2head[i][j] == 'L') {
total++;
} else if (head2head[i][j] == 'N') {
continue;
}
}
double winRate = (double) win/total;
if (total == 0) {
winRate = 0;
}
v.push_back({ i + 1, winRate, upset, weights[i] });
}
sort(v.begin(), v.end(), cmp);
for (auto b : v) {
answer.push_back(b.num);
}
return answer;
}
結果
フィードバック
これは比較的簡単な問題です.
Reference
この問題について([プログラマー]6週目ソートボクサー), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-6주차복서-정렬하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct boxer {
int num;
double win_rate;
int win_big_one;
int weight;
};
bool cmp(boxer a, boxer b) {
if (a.win_rate == b.win_rate) {
if (a.win_big_one == b.win_big_one) {
if (a.weight == b.weight) {
return a.num < b.num;
}
return a.weight > b.weight;
}
return a.win_big_one > b.win_big_one;
}
return a.win_rate > b.win_rate;
}
vector<int> solution(vector<int> weights, vector<string> head2head) {
vector<int> answer;
int len = weights.size();
vector<boxer> v;
for (int i = 0; i < len; i++) {
int total = 0, win = 0, upset = 0;
for (int j = 0; j < head2head[i].length(); j++) {
if (head2head[i][j] == 'W') {
win++;
total++;
if (weights[i] < weights[j]) {
upset++;
}
} else if (head2head[i][j] == 'L') {
total++;
} else if (head2head[i][j] == 'N') {
continue;
}
}
double winRate = (double) win/total;
if (total == 0) {
winRate = 0;
}
v.push_back({ i + 1, winRate, upset, weights[i] });
}
sort(v.begin(), v.end(), cmp);
for (auto b : v) {
answer.push_back(b.num);
}
return answer;
}
フィードバック
これは比較的簡単な問題です.
Reference
この問題について([プログラマー]6週目ソートボクサー), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-6주차복서-정렬하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([プログラマー]6週目ソートボクサー), 我々は、より多くの情報をここで見つけました https://velog.io/@bestcoders/프로그래머스-6주차복서-정렬하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol