https://programmers.co.kr/learn/courses/30/lessons/85002
코딩테스트 연습 - 6주차
복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요
programmers.co.kr
[난이도] level1
[유형] 정렬
[풀이]
정렬시 필요한 변수들을 저장하는 구조체를 선언한 뒤 그곳에 필요한 값들을 저장하고
comparator를 정의하여 정렬해주면 됩니다.
코틀린으로 구현시 sortedBy 함수를 이용하면 comparator를 따로 정의하지 않고도 쉽게 정렬이 가능합니다.
C++
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int N;
struct P{
int w,wl,b,c,idx;
};
P arr[1001];
bool cmp(const P& l,const P& r){
if(l.w*r.wl > r.w*l.wl) return 1;
else if(l.w*r.wl == r.w*l.wl) {
if(l.b > r.b) return 1;
else if(l.b==r.b) {
if(l.c>r.c) return 1;
else if(l.c==r.c){
return l.idx < r.idx;
}
}
}
return 0;
}
vector<int> solution(vector<int> weights, vector<string> head2head) {
vector<int> answer;
N=weights.size();
for(int i=0;i<N;i++){
int w=0,l=0,ww=0;
for(int j=0;j<N;j++){
if(head2head[i][j]=='W') {
w++;
if(weights[j]>weights[i]) ww++;
}
else if(head2head[i][j]=='L') l++;
}
arr[i]={w,w+l,ww,weights[i],i};
}
sort(arr,arr+N,cmp);
for(int i=0;i<N;i++) answer.push_back(arr[i].idx+1);
return answer;
}
Kotlin
data class P(val w:Double,val ww:Int,val weight:Int,val idx:Int)
class Solution {
fun solution(weights: IntArray, head2head: Array<String>): IntArray {
val N=weights.size
var arr = Array<P>(N){P(0.0,0,0,0)}
for(i in 0..N-1){
var w=0;
var l=0;
var ww=0
for(j in 0..N-1) {
if(head2head[i][j]=='W'){
w++
if(weights[j]>weights[i]) ww++
}
else if(head2head[i][j]=='L') l++
}
var wl = 0.0
if(w+l!=0) wl = w.toDouble()/(w+l)
arr[i] = P(wl,ww,weights[i],i)
}
return arr.sortedBy { it.idx }.sortedBy { -it.weight }.sortedBy { -it.ww }.sortedBy{-it.w}.map{it.idx+1}// .toIntArray()
}
}
https://github.com/has2/Problem-Solving/blob/master/programmers/level1/위클리_챌린지.cpp
'Problem-Solving > Programmers' 카테고리의 다른 글
[프로그래머스][level2] n^2 배열 자르기 (C++) (0) | 2022.01.11 |
---|---|
[프로그래머스][level4] 미로 탈출 (C++) (0) | 2021.09.08 |
[프로그래머스][level4] 트리 트리오 중간값 (C++) (0) | 2021.09.08 |
[프로그래머스][level4] 매출 하락 최소화 (C++) (0) | 2021.09.04 |
[프로그래머스][level4] 최적의 행렬 곱셈 (C++) (0) | 2021.09.04 |