2012年2月15日水曜日

TopCoder SRM331 Div2 250Pts

この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 件のコメント:

コメントを投稿

フォロワー

ページビューの合計