NumberMagicEasyリベンジ編

[追記]10/24 1:39 タイトル修正、表の修正

前回書いたコードがあまりにもひどいのでやり直してみました。

入力される文字列に対しての数値に注目すると、以下のようなことが分かります。

入力 出力 入力 出力
YYYY 1 NYYY 9
YYYN 2 NYYN 10
YYNY 3 NYNY 11
YYNN 4 NYNN 12
YNYY 5 NNYY 13
YNYN 6 NNYN 14
YNNY 7 NNNY 15
YNNN 8 NNNN 16

よく見てみると入力をY=0、N=1として見ると2進数を10進数で返していることが分かります。

上の表を”0″,”1″で置換してみるとこうなります。

入力 出力 入力 出力
0000 1 1000 9
0001 2 1001 10
0010 3 1010 11
0011 4 1011 12
0100 5 1100 13
0101 6 1101 14
0110 7 1110 15
0111 8 1111 16

ということで、プログラムの流れとしては、

入力された文字列を1と0に置き換え
↓
10進数に変換
↓
1増やして返す

となります。

で、実装するとこうなります。

public class NumberMagicEasy {
public int theNumber(String answer) {
answer = answer.replace('Y', '0');
answer = answer.replace('N', '1');
return Integer.parseInt(answer, 2) + 1;
}
}

前回のものと比べるとかなりシンプルになりました。

これは翌朝の通学中に気付いたわけですが、

TopCoderでは回答時間内にこういったことを考えコードを書いているので

わたしはまだまだですね。

前回のコードを書いた奴を殴りたい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください