[프로그래머스] 위클리 챌린지 6주차

고재욱·2021년 9월 15일
0

Programmers

목록 보기
2/5

❓ 문제 ❓
위클리 챌린지 6주차

💯 풀이 방법 💯
일일이 구현하는 방법으로 문제를 풀었다.
복싱 선수들의 승률, 자신보다 무거운 사람 이긴 횟수, 무게, 아이디를 담을 구조체 배열을 생성해주었다. (꼭 승률로 해야된다!! -> 승리 횟수로만 카운트했는데 이러면 문제가 아예 달라짐!!) 구조체 배열을 생성하면 문제에 조건에 맞게 정렬해주면 된다.

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

struct box{
    double wins;
    int w_wins, weight, num; 
};

bool cmp(box a, box b){
    if (a.wins > b.wins){
        return true;
    }
    else if(a.wins == b.wins){
        if(a.w_wins > b.w_wins)
            return true;
        else if (a.w_wins == b.w_wins){
            if (a.weight > b.weight)
                return true;
            else if (a.weight == b.weight){
                if (a.num < b.num)
                    return true;
            }
        }
    }
    return false;
}

vector<int> solution(vector<int> weights, vector<string> head2head) {
    vector<int> answer;
    vector<box> array;
    for(int i = 0; i < head2head.size(); i++){
        double wins = 0; int w_wins = 0;
        double cnt = 0;
        for(int j = 0; j < head2head[i].size(); j++){
            if(head2head[i][j] == 'N') continue;
            cnt++;
            if(head2head[i][j] == 'W'){
                wins++;
                if(weights[i] < weights[j]){
                    w_wins++;
                }
            }
        }
        if(wins == 0)
            array.push_back({wins, w_wins, weights[i], i+1});
        else
            array.push_back({wins, w_wins, weights[i], i+1});
    }
    
    sort(array.begin(), array.end(), cmp);
    
    for(int i = 0; i < array.size(); i++){
        answer.push_back(array[i].num);
    }
    
    return answer;
}

0개의 댓글

관련 채용 정보