-
[프로그래머스/위클리 챌린지] 6주차 (C++)알고리즘 문제풀이/프로그래머스 2021. 10. 6. 15:49
https://programmers.co.kr/learn/courses/30/lessons/85002
어렵지않은 구현 + 정렬 문제였다. 주의할 점은 복싱 시합 결과가 'N'일 때는 전체 경기 횟수로 포함되지 않는다는 점, 그리고 나누는 수가 0이될 때 따로 예외처리를 해줘야하는 점이다.
#include <string> #include <vector> #include <algorithm> using namespace std; struct Boxer { int num, underdog, weight; double win_rate; }; vector<Boxer> boxers; int cmp(const Boxer &a, const Boxer &b) { if(a.win_rate == b.win_rate) { if(a.underdog == b.underdog) { if(a.weight == b.weight) return a.num < b.num; return a.weight > b.weight; } return a.underdog > b.underdog; } return a.win_rate > b.win_rate; } vector<int> solution(vector<int> weights, vector<string> head2head) { int n = weights.size(); vector<int> answer(n); for(int i = 0; i < n; i++) { int win_cnt = 0, total_cnt = n, underdog = 0; for(int j = 0; j < n; j++) { if(head2head[i][j] == 'W') { win_cnt++; if(weights[i] < weights[j]) underdog++; // N은 total_cnt로 세지 않는다. } else if(head2head[i][j] == 'N') total_cnt--; } double win_rate; if(total_cnt == 0) win_rate = 0; else win_rate = win_cnt / (double)total_cnt; boxers.push_back({ i + 1, underdog, weights[i], win_rate }); } sort(boxers.begin(), boxers.end(), cmp); for(int i = 0; i < n; i++) { answer[i] = boxers[i].num; } return answer; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/위클리 챌린지] 9주차 (C++) (0) 2021.10.08 [프로그래머스/SQL] 헤비 유저가 소유한 장소 (MySQL) (0) 2021.10.07 [프로그래머스/위클리 챌린지] 5주차 (C++) (0) 2021.09.07 [프로그래머스/Level 2] 거리두기 확인하기 (C++) (0) 2021.08.31 [프로그래머스/위클리 챌린지] 4주차 (C++) (0) 2021.08.30