728x90
위클리 챌린지 6주차 : 복서 정렬하기
https://programmers.co.kr/learn/courses/30/lessons/85002?language=cpp
코드
//프로그래머스 6주차 복서 정렬하기
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Person
{
int num = 0; //자신 번호
int weight = 0; //자신 몸무게
vector<int> win; //이긴 사람
vector<int> win_heavy;
vector<int> lose; //진 사람
double rate = 0; //승률
};
bool cmp(Person& a, Person& b) {
if (a.rate == b.rate) {
if (a.win_heavy.size() == b.win_heavy.size()) {
if (a.weight == b.weight)
return a.num < b.num; //번호 순
return a.weight > b.weight; //자신 몸무게 순
}
return a.win_heavy.size() > b.win_heavy.size(); //자신보다 몸무게가 무거운 복서 많은 순
}
return a.rate > b.rate; //승률 순
}
vector<int> solution(vector<int> weights, vector<string> head2head) {
vector<int> answer;
vector<Person> people;
for (int i = 0; i < weights.size(); i++) {
Person p;
p.num = i + 1;
p.weight = weights[i];
for (int j = 0; j < weights.size(); j++) {
//이긴 사람
if (head2head[i][j] == 'W') {
p.win.push_back(weights[j]);
if (weights[i] < weights[j])
p.win_heavy.push_back(weights[j]);
}
//진 사람
if (head2head[i][j] == 'L')
p.lose.push_back(weights[j]);
}
if(p.win.size() != 0)
p.rate = (double)p.win.size() / (double)(p.win.size() + p.lose.size()); //승률 구하기
people.push_back(p);
}
sort(people.begin(), people.end(), cmp); //정렬
for (auto p : people) {
answer.push_back(p.num);
}
return answer;
}
int main() {
vector<int> weights = { 145,92,86 };
vector<string> head2head = { "NLW","WNL","LWN" };
solution(weights, head2head);
return 0;
}
설명
Person 구조체를 다음과 같이 선언한다.
한사람당 번호, 무게, 이긴사람, 이긴사람 중 자신보다 무게가 많이 나가는 사람, 진사람, 승률을 구하여 구조체를 만들어 벡터에 저장한다.
승률순 -> 자신보다 몸무게가 무거운 복서 많은 순 -> 몸무게 순 -> 번호 순 으로 정렬한다.
고찰
걸린시간 : 50분
정렬하는 기준에서 말이 조금 어려워 하나씩 차근차근 읽어가면서 정렬 기준을 확인하면서 cmp 함수를 구현할 수 있었다.
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
알고리즘(C++) / 프로그래머스 level 1 : 제일 작은 수 제거하기 (0) | 2021.09.15 |
---|---|
알고리즘(C++) / 프로그래머스 위클리 챌린지 7주차 : 입실 퇴실 (0) | 2021.09.14 |
알고리즘(C++) / 프로그래머스 level 3 : 불량 사용자 (0) | 2021.09.10 |
알고리즘(C++) / 프로그래머스 level 3 : 자물쇠와 열쇠 (0) | 2021.09.07 |
알고리즘(C++) / 프로그래머스 level 3 : 이중우선순위큐 (0) | 2021.09.06 |
댓글