このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
ある数字がmulti numberであるというのは、その数字の10進数の表現を2つの数字に分けたときに、二つの数字の各桁の積が等しくなるものがあるということである。例えば、1221という数字は12と21に分ければ、各桁の積は共に2となり、これはmulti numberである。同様に1236もmulti numberとなるが(訳注:123と6に分ければよい)、1234はそうはならない。なお、2つの数に分けるとき、どちらの数も少なくとも1桁以上でなければならないことに注意。つまり12345という数字があれば、1-2345, 12-345, 123-45, 1234-5という4通りの分け方が存在することになる。さて、numberという数字が与えられたとき、multi numberであれば、"YES"、そうでなければ"NO"を返すようなメソッドを作成せよ。
私の実装はこちら。
public class MultiNumber {
public String check(int number) {
String snum = "" + number;
for( int i=1 ; i<snum.length() ; i++ ){
int left = multiplyDigits(snum.substring(0, i));
int right = multiplyDigits(snum.substring(i));
if( left == right ) return "YES";
}
return "NO";
}
private int multiplyDigits(String s){ // 分けられた数字の各桁の積を計算
int ret = 1;
for( int i=0 ; i<s.length() ; i++ ){
ret *= (s.charAt(i) - '0');
}
return ret;
}
}
得点は241.10/250、1回のsubmitでシステムテストクリア。中央値は約169点。

0 件のコメント:
コメントを投稿