2012年4月8日日曜日

TopCoder SRM367 Div2 250Pts

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

チェスの盤面は8*8のマスからなる。各行、列は黒と白が交互に並んでいる。左上の(0,0)の位置は白である。さて、問題ではboard[]という文字列型配列が与えられる。boardのi番目の要素のj番目の文字は"F"であれば占領されている(訳注:チェスの駒がマスの上にあるというイメージでしょうか)。"."であればマスの上になにもないということになる。白いマスで占領されているものの数を返せ。

私の解答はこちら。

public class WhiteCells {

 public int countOccupied(String[] board) {
  int nOccupied = 0;
  for( int i=0 ; i<board.length; i++ ){
   String row = retRow(i);
   for( int j=0 ; j<board[0].length() ; j++ ){
    // 白いマスの上が占領されている条件
    if( row.charAt(j) == 'W' && board[i].charAt(j) == 'F') nOccupied++;
   }
  }
  return nOccupied;
 }

 private String retRow(int r){ // 行によって要素の並びが違うWが白、Bが黒を表す
  return  r % 2 == 0 ? "WBWBWBWB" : "BWBWBWBW";
 }

}

得点は227.93/250、1回のsubmitでシステムテストクリア。実装よりも英語の問題文の理解に時間がかかっています。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計