2011年4月23日土曜日

TopCoder SRM175 Div2 250Pts

今日も書いたコードのご紹介。本日の問題はこちらから(要TopCoder登録 & 問題文は英語)。

日本語で問題文を要約すると次のようになる。

今あなたは時計の12時の場所にいる。これからコインを投げて、i回目にh(表)が出れば、時計回りにi時間、t(裏)が出れば反時計回りにi時間分時計の周りを動く。hとtが出た順序を示した文字列flipsが与えられたときに、最終的に時計のどの数字の場所にいるか。回答は1-12の整数で回答する(0時はダメ)。ちなみにアメリカで13-24時という時間の表現はミリタリータイムと呼ばれており、軍人さんが使う表現のようである。

例えば、flipsが"hthhhhh"で与えられたとすれば、1-2+3+4+5+6+7=24時間時計回りに回ったので、12(時)と回答すればよいということになる。

実装は以下の通り。得点は237.93(クラス内部の実装で6分台らしい)。toCharArrayというメソッドを最初から知っていればもっと高得点だったに違いない。

public class ClockWalk {
 public int finalPosition(String flips) {
  char[] sp = flips.toCharArray();
  int n=0;
  for( int i=0 ; i<sp.length ;i++){
  if( sp[i] == 'h'){
   n += i+1;
  }else{
   n -= i+1;
  }
 }
 n = n%12;
 if( n<=0 ) n += 12;
 return n;
}

}

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計