2011年6月19日日曜日

TopCoder SRM190 Div2 250Pts

英語の速読とJavaのトレーニングも約20回に到達。今日の問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。

今日の問題では、バスケットボールの試合における得点効率を求める。得点効率を求める式は、次のように表される。

得点効率 = (合計点数) / (フィールドショット+0.5*フリースロー数 )

フィールドショットは2点、3点のシュートを指す。フリースローは1点のシュートを指す。今、gameLogという、シュートの成功、失敗に関する文字列型の配列が入力されたときに、得点効率を返すメソッドを作成せよ。文字列の内容は、以下のコードを見れば明らかであるが、n点のシュートを成功/失敗という形式になっている。

私の解答は以下の通りである。

public class ScoringEfficiency {
 public double getPointsPerShot(String[] gameLog) {
  int totalPoints = 0;
  int fieldGoalsAttempted = 0;
  int freeThrowsAttempted = 0;
  for( int i=0 ; i<gameLog.length ; i++ ){
   if( gameLog[i].equals("Made 2 point field goal") ){
    totalPoints += 2;
    fieldGoalsAttempted++;
   }else if( gameLog[i].equals("Missed 2 point field goal") ){
    fieldGoalsAttempted++;
   }else if( gameLog[i].equals("Made 3 point field goal") ){
    totalPoints += 3;
    fieldGoalsAttempted++;
   }else if( gameLog[i].equals("Missed 3 point field goal") ){
    fieldGoalsAttempted++;
   }else if( gameLog[i].equals("Made free throw") ){
    totalPoints++;
    freeThrowsAttempted++;
   }else if( gameLog[i].equals("Missed free throw") ){
    freeThrowsAttempted++;
   }
  }
  return (double)(totalPoints/(fieldGoalsAttempted+0.5*freeThrowsAttempted));
 }

}

得点は231.32/250。全体の正解率は約95%。以前の問題で、無理に凝った分岐させない方が分かりやすかったので、愚直にif文を並べて書いてみた。この方がメンテナンスはしやすいと思われる。他の解答を見ると、文字列が特定の文字列を持っているか判定するcontainsというメソッドを利用する方法もあるようだ。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計