このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。
ゲームで二つのチームにメンバーを分けるということをしたい。分けるためにまずはキャプテンを決める。そして交互にチームを作るためにプレーヤーを選択する。それぞれのターンでは一人ずつメンバーを選ぶ。キャプテンは強いメンバーが欲しいので、残っている中でベストなプレーヤーを選ぶ。プレーヤの強さはstrengths[]という配列で与えられており、値が大きいほど良いプレーヤーである。全員選び終えたところで、チームの強さというのはプレーヤーの強さの総和で計算される。二つのチームの強さの絶対値を返せ。
人数が奇数の時は先に選ぶキャプテンがとることになるため、2チームの人数は同じとは限らないことに注意。
私の解答はこちら。
import java.util.*;
public class TeamSplit {
public int difference(int[] strengths) {
int diff = 0;
Arrays.sort(strengths);
for( int i=0 ; i<strengths.length ; i++ ){
if( i % 2 == 0 ){
diff += strengths[strengths.length-i-1];
}else{
diff -= strengths[strengths.length-i-1];
}
}
return diff;
}
}得点は236.44/250。ソートを楽にする方法がArrays.sortだった。最初から逆順から並べるにはコンパレータ使わないとダメかな?

0 件のコメント:
コメントを投稿