2011年6月12日日曜日

TopCoder SRM186 Div2 250Pts

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

問題を大まかに説明する。お題はゴルフについて。パーになる打数の整数型配列と、プレーヤーのスコアシート(triple bogeyやbirdieなどの文字列配列)が与えられたときに、合計打数を返すメソッドを作成せよ。

私の解答は以下の通り。

public class GolfScore {
 public int tally(int[] parValues, String[] scoreSheet) {
  int totalStrokes = 0;
  String pattern[] = {"triple bogey","double bogey","bogey","par","birdie","eagle","albatross"};
  int stroke[] = {3,2,1,0,-1,-2,-3};
  int idx = 0;
  for( int i=0 ; i<parValues.length ; i++){
   if( scoreSheet[i].equals("hole in one") ){
    totalStrokes++;
   }else{
    for( int j=0 ; j<pattern.length ; j++ ){
     if( scoreSheet[i].equals(pattern[j]) == true){
      idx = j;
      break;
     }
    }
    totalStrokes += (parValues[i] + stroke[idx]);
   }
  }
  return totalStrokes;
 }
}

点数は226.47/250でした。以前嵌った文字列比較はequalsメソッドで無事解決。反省会と称して他の人の解答を見ていくと、わざわざホールインワンを特別に扱わなくとも、scoreSheetに登場しうる文字列に応じてif文を8つ書いてしまう方が単純だし、バグも少なくて楽に書けることに気付いた。他にもハッシュを用いた回答がいくつかあった。今後の参考としたい。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計