今日の問題はこちら(要TopCoder登録)。
概要は次の通り。クロスワードパズルの行方向を"X...X..X"のように文字列で表す。Xは文字が入らない場所で、.は文字が入る場所を表すとする。クロスワードの各行は配列board[]で与えられている。またsize(>=2)は.が連続して続く数を表すものとする。このとき、パズル全体を見て、行方向で.がちょうどsize個続いている箇所はいくつあるかというのが問題。
上位者の解答を見てなるほどと思ってしまった。こんな時はsplitメソッドでXで区切れば二重ループ一つで解決だ。
public class CrossWord {
public int countWords(String[] board, int size) {
int n = 0;
for( int i=0 ; i<board.length ; i++){
String[] tmp = board[i].split("X");
for( int j=0 ; j<tmp.length ; j++){
if( tmp[j].length() == size){
n++;
}
}
}
return n;
}
}JavaはCと違って基本的なメソッドをある程度叩き込まないと、ネットとエディタを往復することになり、コーディングに時間がかかりすぎるということを実感。

0 件のコメント:
コメントを投稿