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;
}