CodeWars 아흔 여덟 번째 문제

Updated:

Merged String Checker

public static boolean isMerge(String s, String part1, String part2) {
    int tempIndex = 1;

    while(s.length() > 0) {

        String part1SubString = part1.length() == 0? "" : part1.substring(0, tempIndex);
        String part2SubString = part2.length() == 0? "" : part2.substring(0, tempIndex);

        String firstString = s.substring(0,tempIndex);

        if(part1SubString.equals(firstString) && part2SubString.equals(firstString)){
            tempIndex++;

            if(tempIndex > part1.length() && tempIndex > part2.length()) {
                break;
            }
        } else if (part1SubString.equals(firstString)) {
            part1 = part1.substring(tempIndex);
            s = s.substring(tempIndex);
            tempIndex = 1;
        } else if (part2SubString.equals(firstString)) {
            part2 = part2.substring(tempIndex);
            s = s.substring(tempIndex);
            tempIndex = 1;
        } else {
            return false;
        }
    }

    return "".equals(s) && "".equals(part1) && "".equals(part2)? true : false;
}
  • 문제가 생각보다 조금 까다로웠다.
  • Codewars, Code, Code 경우와 “Bananas from Bahamas”, “Bahas”, “Bananas from am”인 경우 때문에 코드가 더러워졌다.
  • 물론 나의 알고리즘 실력이 미숙해 그런 것이긴 하지만 말이다.
  • 일단 어거지로 해결하고 BEST CODE를 보았는데 역시나 깔끔하게 재귀함수로 해결했다.
  • 그래도 최근 재귀함수에 대해서 공부해가지고 쉽게 이해가 갔다.
public static boolean isMerge(String s, String part1, String part2) {
    if(s.length() != part1.length() + part2.length()) return false;
    if(s.length() == 0) return true;
    return (part1.length() > 0 && part1.charAt(0) == s.charAt(0) && isMerge(s.substring(1), part1.substring(1), part2)) ||
        (part2.length() > 0 && part2.charAt(0) == s.charAt(0) && isMerge(s.substring(1), part1, part2.substring(1)));
}