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