この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 件のコメント:
コメントを投稿