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