このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文について、おおまかに説明する。
あなたはクロスワードパズルを作成している。盤面は作成したのだが、パズルに単語をあてはめる必要がある。空のクロスワードパズルはXという黒マスと.という空のマスからなる。スロットの長さがNというのは、Nの空マスが連続した状態として定義され、黒マスあるいは盤面の端に挟まれたものである。Nは最低でも2とする。
board[]という空のクロスワードパズル(Xと.の文字のみからなる)と、スロットのサイズsizeが与えられたとき、水平方向のスロットで長さがちょうどsizeになるものの数を返せ。boardの各要素はパズルの各行を表しているものとする。
私の解答はこちら。1行取り出して.がちょうどsize個現れる回数をカウントするという、言われた通りのことを実装するだけで済む。
public class CrossWordPuzzle { public int countWords(String[] board, int size) { int n=0; for( int i=0 ; i<board.length ; i++ ){ String[] aLine = board[i].split("X"); for( int j=0 ; j<aLine.length ; j++ ){ if( aLine[j].length() == size ) n++; } } return n; } }
得点は247.08/250。行方向のみカウントすればよいので、特にインデックス操作もいらず、非常に簡単に解くことができた。列方向もカウントすると、charAtメソッドなどを使って解くのだろうなと考えながら解いていました。
0 件のコメント:
コメントを投稿