今日の問題はこちら(要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 件のコメント:
コメントを投稿