2012年2月19日日曜日

TopCoder SRM333 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題についておおまかに説明する。

チェスの盤面の模様は以下の条件を満たす。

  • 模様は長方形である。
  • 模様は"."と"X"のみからなる。
  • どの二つの隣り合う模様も、水平方向、垂直方向に同じではない
  • 模様の左下は"."である。

作成するメソッドの引数には、rowsとcolumnsという二つの整数が与えられる。rowsとcolumnsという次元を持つ盤面を計算し、それを文字列型配列として返せ。返り値の要素は模様の行方向に対応する。特に、最後の要素の先頭は盤面の左下を指すものとする。

私の解答はこちら。

public class ChessboardPattern {

 public String[] makeChessboard(int rows, int columns) {
  String[] ret = new String[rows];
  String[] pat = {"", ""}; // Arrays.fill(pat,"")と書いてもいいですね
  for( int i=0 ; i<columns ; i++ ){ // 行方向の2パターンを生成
   if( i % 2 == 0 ){
    pat[0] += ".";
    pat[1] += "X";
   }else{
    pat[0] += "X";
    pat[1] += ".";
   }
  }
  for( int i=0 ; i<rows ; i++ ){ // 行番号に応じてパターンをセット
   if( i % 2 == 0 ){
    ret[rows-i-1] = pat[0];
   }else{
    ret[rows-i-1] = pat[1];
   }
  }
  return ret;
 }

}

得点は235.38/250、中央値は約222点。最後の要素が左下になるということをどう表現するかという点が一番難しいが、比較的簡単な部類の問題。

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計