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