강의로 돌아가기
백창훈

matches 를 사용하고싶은데 정규식을 잘 모르겠습니다.

이렇게 만들어 봤는데 정규식이 틀린건지 테스트 케이스 3개정도만 통과하네요 matches로 불가능한 문제인가요?

작성중인 코드―Solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
    public static int solution(String skill, String[] skill_trees) {
        int answer = 0;
        String regex = "^";
        char [] skillChar = skill.toCharArray();

        for(char cha : skillChar) {
            regex +=".*"+cha;
        }
        regex += "*$";
        System.out.println(regex);
        for(int index=0;index<skill_trees.length ; index++) {
            if(skill_trees[index].matches(regex)) {
                answer++;
            }
        }

        return answer;
    }
}
1 개의 답변
한상민

해당 정규식은 다음과 같은 예시를 해결할 수 없습니다.
skill = ABCDE
skill_trees[index] = ABC or AB
실제 답은 true지만 위 코드는 false로 처리합니다.
완성된 정규식에 따르면 마지막 문자를 제외한 A, B, C, D는 모두 존재해야하기 때문입니다.
이를 해결하기 위해 중간 문자에 *을 붙여버리면 AE와 같은 형태도 true로 처리합니다.
앞 문자는 없을 수도 있고 있을 수도 있다.라는 반복되는 조건 때문에 중간 문자가 비어버리는 AC, AE와 같은 경우를 처리할 수 없습니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.