【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の位になる。