CodeWars 열 세 번째 문제
Updated:
Scramblies
public class Scramblies {
public static boolean scramble(String str1, String str2) {
HashMap<Character, Integer> str1Map = new HashMap<Character, Integer>();
for(char c : str1.toCharArray()){
if(str1Map.containsKey(c) == false) {
str1Map.put(c, 1);
} else {
str1Map.put(c, str1Map.get(c) + 1);
}
}
for(char c : str2.toCharArray()){
Integer count = str1Map.get(c);
if(count == null || count == 0) {
return false;
} else {
str1Map.put(c, count-1);
}
}
return true;
}
}
*나는 HashMap을 이용하여 풀었다. Map의 특성을 이용하여 풀었기 때문에 어렵지 않았다. 대부분 나랑 비슷하게 풀었다.
*아래는 솔루션에 나와 있던 코드인데 replaceFirst 메소드를 모르면 풀 수가 없을 것 같았다. 이건… 조금 무리일듯 하지만 이번 기회에 이런 메소드를 알게 되었다는 것에 만족했다.
*성능을 더 고려 했을 때 아래 코드에서 첫 줄의 제약조건을 거는 것은 좋은 것 같다. 이런 생각을 기르는 것은 좋은 것 같다.
if (str2.length() > str1.length())
return false;
for (String s: str2.split("")) {
if (!str1.contains(s)) return false;
str1 = str1.replaceFirst(s,"");
}
return true;
*replaceFirst(String a, String b) : 문자열에서 가장 첫 번째로 나타나는 문자열 a를 문자열 b로 변경