2011年4月22日金曜日

TopCoder SRM174 Div2 250Pts

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

コメントを投稿

フォロワー

ページビューの合計