2013年1月6日日曜日

TopCoder SRM450 Div2 250Pts

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

あなたはとてもおかしなコンピュータを与えられた。コンピュータのメモリはいくつかのビットからなり、それぞれは0で初期化されており、以下の操作の種類のみ振る舞うことができる:メモリのあるビットを選び、0か1の値を選択する。メモリの選択されたビットと最後のビットの間のすべてを選んだ値にする。さて、memという文字列が与えられる。memの文字の数はコンピュータのメモリの数に等しい。コンピュータのメモリをmemと同じにするのに必要となる最小の操作の回数を返すメソッドを作成せよ。

私の解答はこちら。

public class StrangeComputer {

 public int setMemory(String mem) {
  int nChange = 0;
  char bit = '0';
  for( int i=0 ; i<mem.length() ; i++ ){
   char c = mem.charAt(i);
   if( bit != c ){
    nChange++;
    bit = c;
   }
  }
  return nChange;
 }

}

この問題では先頭から順に直前の文字と比較して、0と1が反転した回数を数えればよいことになる。先頭の文字の前の文字はすべて0に初期化するという条件から、0と考えておけばよい。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計