2012年9月6日木曜日

TopCoder SRM422 Div2 250Pts

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

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計