このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。
ストレートの数に関するトランプゲームで遊んでいる。値が連続したカードの集合が手の強さを決める。hand[]という整数型配列のi番目の値が手の中のiという値の数を表している。長さkのストレートの数を返せ。
例えば、hand[] = { 0, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }という手が与えられると、k=2のストレートの数(強さ)は5になる。これは2のカードと3のカードの組が3通り、3のカードと4のカードの組が2通りあるので、長さ2のストレートの数は3+2=5になるわけである。
私の解答はこちら。
public class Straights { public int howMany(int[] hand, int k) { int cnt = 0; for( int i=0 ; i<hand.length-k+1 ; i++ ){ int perm = hand[i]; for( int j=1 ; j<k ; j++ ){ perm *= hand[i+j]; } cnt += perm; } return cnt; } }
得点は229.00/250、中央値は約190点。英語の読解と実装に同じぐらいの時間かかったかな?IndexOutOfBoundsExceptionにだけ注意しましょう(コンパイル後のテストでhand[i+j]で何度か例外を投げられてしまった)。
0 件のコメント:
コメントを投稿