2011年9月22日木曜日

TopCoder SRM250 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。

電機メーカーがあなたに抵抗の色コードを解読するプログラムを書くように呼んだ。code[]という、抵抗に刻まれた3つの色帯が文字列型配列として与えられる。その抵抗が表す抵抗値(オーム)を返せ。最初の2つの色が値を、最後の1つの色が先頭2つの値に対して掛ける値を示している。

例えば、code[]={"red","brown","red"};であれば、返すべき抵抗値は21*10^2=2100になる。

抵抗に用いる色については一般的な抵抗と同じである。例えば、こちらを参考されたい。

私の解答はこちら。

public class ColorCode {
 public long getOhms(String[] code) {
  String[] color = {"black","brown","red","orange","yellow",
                    "green","blue","violet","grey","white"};
  int val = 0;
  for( int i=0 ; i<2 ; i++ ){
   for( int j=0 ; j<color.length ; j++){
    if( code[i].equals(color[j]) ){
     val = val*10 + j;
     break;
    }
   }
  }
  int p = 0;
  for( int i=0 ; i<color.length ; i++ ){
   if( code[2].equals(color[i])){
    p = i;
    break;
   }
  }
  return (long)(val*Math.pow(10,p));
 }

}

得点は181.20/250、中央値は約195点。方針を立てるのは容易でしたが、とんでもない勘違いで、大幅にタイムロスしてしまいました。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計