CodeWars 일백 열 네 번째 문제

Updated:

Triple trouble

public static int TripleDouble(long num1, long num2) {
    String num1String = String.valueOf(num1);

    Pattern compile = Pattern.compile("(\\w)\\1\\1");

    Matcher mc = compile.matcher(num1String);

    while(mc.find()) {

        String number = mc.group().substring(0,1);
        number += number;

        String num2String = String.valueOf(num2);
        compile = Pattern.compile(number);

        if(compile.matcher(num2String).find()) {
            return 1;
        }
    }

    return 0;
}
  • 이번에도 정규식으로 풀어봤다. 이번 문제를 통해서는 \1을 배웠다.
  • ”(\w)\1\1”의 의미는 같은 숫자가 3번 연속 나오는 것이다.
  • 물론 두번째 pattern에 “(\w)\1"로 풀어도 같으나 단순하게 풀어봤다.
  • Best 코드는 나도 처음에 생각했다. 그러나 숫자가 너무 크면 오래 걸릴 것 같다고 생각했다.
  • 그렇지만 숫자가 숫자를 문자열로 바꾸면 굉장히 짧다는 것을 이제서야 알았다..ㅠㅠ 아쉽…
public static int TripleDouble(long num1, long num2) {
    String n1str = String.valueOf(num1);
    String n2str = String.valueOf(num2);
    
    for(int i = 0; i < 10; i++) {
        
        String n = String.valueOf(i);
        
        if(n1str.contains(n+n+n) && n2str.contains(n+n)) {
            return 1;
        }
    }
    
    return 0;
}