このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。
文字列配列が入力されたときにそのハッシュ値を計算する。今回ハッシュ値は配列の一つの要素に対して次のように定義する。
ハッシュ値=アルファベットの位置+その文字列が配列の何番目か+文字が文字列の何番目の位置にあるか
配列の各要素で上の値を計算し、その合計を配列のハッシュ値として返すメソッドを作成せよ。ただし、アルファベットの位置というのは、'A'を基準とした位置である。'A'を0とし、'B'を1、'C'を2というようにする。なお、入力input[]中のアルファベットは大文字のA-Zに限られる。配列や文字が何番目かというのも同様に先頭を0として扱うこと。
例えば、input[]={"ABC","DEF"}という入力であったとすれば、先頭の要素"ABC"のハッシュ値は(0+0+0)+(1+0+1)+(2+0+2)=6、"DEF"のハッシュ値は(3+1+0)+(4+1+1)+(5+1+2)=18なので、6+18=24が返す値となる。
私の解答はこちら。
public class ArrayHash { public int getHash(String[] input) { int total = 0; for( int i=0 ; i<input.length ; i++ ){ for( int j=0 ; j<input[i].length() ; j++ ){ total += i+j+(input[i].charAt(j)-'A'); } } return total; } }
得点は248.36/251、中央値は約240点弱。二重ループの例題になってしまいました。
0 件のコメント:
コメントを投稿