문제 링크
https://leetcode.com/problems/valid-number/
풀이
전체적인 풀이 과정은 다음과 같다.
- 해당 조건을 만족하는 정규표현식을 생성 후, 주어지는 문자열과 매칭 결과를 반환
문제 풀이를 위해 속도적인 측면을 고려했을 때 복잡한 조건문을 통해 문자열을 검증하는 것이 맞지만, 스터디에서 한 분이 정규표현식을 활용한 풀이를 보여줘 시도를 해본 문제이다. 결국 문제에서 요구하는 숫자의 정체는 e,E라는 지수 표현을 제외하면, 선택적 괄호 이후 크게 3가지이다. 첫 번째는 단순히 숫자만 오는 형태, 두 번째는 숫자와 점(.) 이후 선택적으로 숫자가 오는 형태, 마지막으로는 선택적으로 숫자가 오고 이후 점(.)이 오고 나서 숫자가 하나 이상 나오는 케이스다. 이를 정규표현식으로 나타내면
[-+]?([0-9]+(\\.[0-9]*)?|[0-9]*\\.[0-9]+)
해당 형태가 된다. 이후 이제 선택적으로 지수인 e, E가 따라올 수 있고, 그 이후에 이제 숫자가 추가된다. 다만 이 경우엔 소수점이 오지 않기 때문에 단순히 선택적으로 괄호가 오고나서는 하나 이상의 숫자가 오면 된다.
"^[-+]?([0-9]+(\\.[0-9]*)?|[0-9]*\\.[0-9]+)([eE][-+]?[0-9]+)?$";//최종 정규표현식
그렇게 정규표현식을 완성하고 나서는, 단순히 주어진 문자열 s를 해당 정규표현식과 비교한 결과를 반환해주면 된다.
class Solution {
public boolean isNumber(String s) {
String pattern = "^[-+]?([0-9]+(\\.[0-9]*)?|[0-9]*\\.[0-9]+)([eE][-+]?[0-9]+)?$";//정규표현식
return Pattern.matches(pattern, s);
}
}
결과
'Algorithm > 코드 풀이' 카테고리의 다른 글
LeetCode: 68번 (Text Justification) [JAVA] (0) | 2023.05.01 |
---|---|
프로그래머스: 요격 시스템 [JAVA] (0) | 2023.04.23 |
LeetCode: 63번 (Unique Paths II) [JAVA] (0) | 2023.04.23 |
LeetCode: 64번 (Minimum Path Sum) [JAVA] (0) | 2023.04.09 |
LeetCode: 62번 (Unique Paths) [JAVA] (0) | 2023.04.09 |