2011年8月28日日曜日

TopCoder SRM237 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。

0-9と書かれたカードからなるデッキからプレーヤーにカードを配る。カードの順を上から表した文字列をdeckとし、それをnumPlayersに順番に配る。このとき各プレーヤーに対し、配られたカードを順に表す文字列配列を返せ。ただし、カードの枚数は常にプレーヤー数の倍数ちょうどで用意されているとは限らない。倍数にならない時は、最大限配りつつ枚数は全員同じになるようにせよ。

例えばnumPlayers=3、deck="03579"とすると、返す配列は{"0","3","5"}になる。7、9と書かれたカードは配らないことに注意。

私の解答はこちら。

import java.util.Arrays;
public class Cards {
 public String[] deal(int numPlayers, String deck) {
  int nDeal = deck.length()/numPlayers;
  String[] ret = new String[numPlayers];
  Arrays.fill(ret,"");
  for( int i=0 ; i<nDeal ; i++ ){
   for( int j=0 ; j<numPlayers ; j++ ){
    ret[j] += deck.charAt(i*numPlayers+j);
   }
  }
 return ret;
 }
}

得点は205.07/250、参照型のStringを初期化すると""でなく、nullが入るということを忘れていて、いつまでたってもnull pointer exceptionが出ていましたとさ。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計