ikemonn's blog

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

【TopCoder】SRM 158 DIV2 Lv.1

SRM 158 DIV2 Lv.1

問題文概略

文字列を規則にそって並べ替える。

書いたコード

全パターンが4つだったので、すべて書いた。 汎用性がない。。

public class TireRotation {

    public int getCycle(String initial, String current) {
        String char1 = initial.substring(0,1);
        String char2 = initial.substring(1,2);
        String char3 = initial.substring(2,3);
        String char4 = initial.substring(3,4);

        String str1 = char1 + char2 + char3 + char4;
        String str2 = char4 + char3 + char1 + char2;
        String str3 = char2 + char1 + char4 + char3;
        String str4 = char3 + char4 + char2 + char1;

        int ans = 0;

        if (current.equals(str1)) {
            ans = 1;
        } else if(current.equals(str2)) {
            ans = 2;
        } else if(current.equals(str3)) {
            ans = 3;
        } else if(current.equals(str4)) {
            ans = 4;
        } else {
            ans = -1;
        }

        return ans;
    }

}

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

public class TireRotation {

    public int getCycle(String initial, String current) {
        for(int i = 1; i <= 4; i++) {
            if(initial.equals(current)) return i;
            initial = rotate(initial);
        }
        return -1;
    }

    String rotate(String x) {
        char[] v = x.toCharArray();
        char tmp = v[0];
        v[0] = v[3];
        v[3] = v[1];
        v[1] = v[2];
        v[2] = tmp;
        return new String(v);
    }
}

雑感

文字列を一文字ずつ取得しようと思いsubstringを使ったのだが、toCharArrayで文字列を配列にする方法もあるのか。

文字列を比較するときは == ではなく、str.equals(str1)を使うこと。