このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題についておおまかに説明する。
あなたは自分の部屋のドアに番号をつけようとしている。家の近くの店からは、プラスチックでできた素敵な数字のセットが提案された。セットはきっちり10個の桁を含んでいる。10個の各桁は0~9の整数である。roomNumberという部屋番号が与えられたとき、必要となる数字のセットの数を返せ。なお、6は9としても使える(その逆も然りである)。
例えば6699であれば2となり、1234567890であれば1、112345は2という結果が返されることになる。
私の解答はこちら。
public class RoomNumber {
public int numberOfSets(int roomNumber) {
int[] n = new int[10];
while( roomNumber > 0 ){
int mod = roomNumber % 10;
n[mod]++; // 数字の出現回数をカウント
roomNumber /= 10;
}
int n69 = 0; // 6と9が登場した回数
int max = 0;
for( int i=0 ; i<n.length ; i++ ){
if( i!=6 && i!=9 ){ // 6と9以外で必要なセット数の最大値を計算
max = Math.max(max, n[i]);
}else{ // 6と9だけは登場回数をカウント
n69 += n[i];
}
}
n69 = n69%2 == 0 ? n69/2 : n69/2+1; // 6と9で必要になるセット数を計算
max = Math.max(max, n69);
return max;
}
}得点は219.52/250。1回の提出でシステムテストクリア。6と9の数だけはroomNumberに6と9が出現した回数の合計で考えなければならない。解答の作成よりも、問題文の読解に手間取った感がありました。

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