英語の速読と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 件のコメント:
コメントを投稿