このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題についておおまかに説明する。
サンタクロースが、今年もプレゼントを袋一杯にしてやってきた。N人の子供たちは一列に並び、プレゼントがもらえることを待ち遠しくおもっている。サンタクロースは袋からプレゼントを取り出して、列の先頭にいる子供にそれを渡す。プレゼントをもらった子供はもらったプレゼントが4つにならないうちは列の最後尾に行く。4つの場合は家に帰る。これを列の子供とプレゼントが残っている間繰り返す。
gifts[]というサンタの袋に入っているプレゼントの文字列があり、その配列の順序でサンタはプレゼントを渡す。k番目の要素がk番目に並んだ子供の受け取ったプレゼントを表すN個の文字列型配列を返せ。プレゼント名はもらった順にならべ、それらの文字は半角スペース1つで区切られる。なお、0番目の子供は初期状態で、列の先頭に並んでいた子供、1番目はその次に並んでいた子供を表す。
私の解答はこちら。
public class SantaGifts {
public String[] distribute(String[] gifts, int N) {
String[] ret = new String[N];
// Arrays.fill(ret,"");としても良い
for( int i=0 ; i<ret.length ; i++ ){
ret[i] = "";
}
int nGift = Math.min(N*4, gifts.length);
for( int i=0 ; i<nGift ; i++ ){
if( i >= N ) ret[i%N] += " ";
ret[i%N] += gifts[i];
}
return ret;
}
}得点は238.51。文字型配列の初期化方法はArras.fillが私の解答よりエレガントですね。
0 件のコメント:
コメントを投稿