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