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