今日のTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。
問題について説明する。
数学嫌いでも、ある成績を得るためには何点とったらよいかという計算は役立つと思っている。ここでは平均が90点以上であればA、Aではないが平均80点以上であればB、Bではないが平均70点以上であればC、Cではないが平均60点以上であればDという評価にしよう。最終試験の最低点は0点、最高点は100点であるとする。欲しい成績desireと、過去の試験の点数tests[]が与えられたときに、最終試験で最低何点取ればよいかを返すメソッドを作成せよ。ただし、満点をとっても届かない場合は-1を返すようにせよ。
私の解答は以下の通り。
public class Education { public int minimize(String desire, int[] tests) { int minScore = 0; int total = 0; if( desire.equals("A") ){ minScore = 90; }else if( desire.equals("B") ){ minScore = 80; }else if( desire.equals("C") ){ minScore = 70; }else{ minScore = 60; } for( int i=0 ; i<tests.length ; i++ ){ total += tests[i]; } int neededScore = minScore*(tests.length+1)-total; if( neededScore > 100 ) return -1; if( neededScore < 0 ) return 0; return neededScore; } }
得点は237.46/250。正解率は78.45%。必要なスコアの計算が、tests.length+1をかけるということぐらいしか引っかかりそうな場所が思いつきません。素直な実装で解けたと思います。