ikemonn's blog

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

【TopCoder】SRM 160 DIV2 Lv.1

SRM 160 DIV2 Lv.1

問題文概略

文字列が与えられており、特定の規則にそって文字列を数字に変換する

書いたコード

public class Substitute {

    public int getValue(String key, String code) {

        char[] keyArray = key.toCharArray();
        char[] codeArray = code.toCharArray();
        int ans = 0;

        for(char x: codeArray) {
            int num = 1;
            for(char y: keyArray) {
                if(ans == 0 && num == 10) {
                    ans = 0;
                } else if (x == y && num == 10) {
                    ans = ans * 10;
                } else if (x == y) {
                    ans = ans * 10 + num;
                }
                num++;
            }
        }
        return ans;
    }

}

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

import java.util.HashMap;

public class Substitute {

    public int getValue(String key, String code) {

        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        for(int i=0; i<10; i++) {
            map.put(key.charAt(i), (i+1)%10);
        }
        String ans = "";
        for(char x : code.toCharArray()) {
            if(map.containsKey(x)) {
                ans += map.get(x);
            }
        }
        return Integer.parseInt(ans);
    }

}

雑感

自分の解答は場合分けが多くて、スマートじゃない。

1の位を文字列としてくっつけていけば良いと思っていたのだが、やり方が分からなかった。

i%10

こうすれば1の位になる。