ikemonn's blog

技術ネタをちょこちょこと

【TopCoder】SRM 155 DIV2 Lv.1

SRM 155 DIV2 Lv.1

問題文概略

特定の文字列を数字に変換する

書いたコード

解けなかった。 一時文字ずつ文字を調べていき、'X'が連続して出た数と’-’が出た数を数え、それぞれ数字に変換しようとしたが泥沼にはまった。

他の参加者のコードを読んで修正した

public class Quipu {

    public int readKnots(String knots) {
        int number = 0;
        int lengthX = 0;
        for (int i = 0; i < knots.length(); i++) {
            if(knots.length() == 'X') {
                lengthX++;
            } else {
                number = number * 10 + lengthX;
                lengthX = 0;
            }
        }
        return number;
    }
}
public class Quipu {

    public int readKnots(String knots) {

        knots += "$";
        String ans = "";
        for(String x : knots.split("-")) {
            if(!x.equals("$")) {
                ans += x.length();
            }
        }
        return Integer.parseInt(ans);
    }
}

雑感

数字を並べていく問題は「10倍して足していく」という手法が使えることを覚えておこう。

2つ目のコードは赤色コーダーさんのもの。こんな風にうまいこと考えられるようになりたい。