will come true

[프로그래머스 / Level1] 문자열 다루기 (Java) 본문

Algorithm

[프로그래머스 / Level1] 문자열 다루기 (Java)

haehyun 2021. 10. 30. 20:15
728x90

문제

https://programmers.co.kr/learn/courses/30/lessons/12918

 

코딩테스트 연습 - 문자열 다루기 기본

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1

programmers.co.kr

 

기존 코드 (성공)

public boolean solution(String s) {
    if((s.length() == 4 || s.length() == 6) && s.replaceAll("[^0-9]", "") == s){
        return true;
    }else{
        return false;
    }
}

조건1) 문자열의 길이가 4이거나 6. (OR)
조건2) 문자열은 숫자로만 구성 (=문자열에 숫자가 아닌값이 존재하지 않음)
replaceAll 메소드를 통해 문자열에서 숫자가 아닌 값을 제거한 결과물(String)이 기존 문자열과 같을 경우
=> replaceAll 대체 결과 문자열이 변경되었다면 기존 문자열에 '숫자가 아닌 값'이 존재했다는 뜻

 

학습 내용

A. 문자열 패턴 체크

메서드 설명
boolean matches(String regex) 해당 문자열이 정규식 패턴에 부합하는지 체크 (true/false)

 

B. 정규식 문법

정규식 설명
^ 문자열 시작
$ 문자열 종료
. 임의의 한 문자
? 앞문자가 없거나 한번 {0~1}
* 앞문자가 없거나 한번 이상 {0~n}
+ 앞문자가 한번 이상 {1~n}
[] 문자의 집합이나 범위.
범위는 '-'로 지정, [] 내에의 ^은 not을 의미.
{} 문자 존재 횟수 또는 범위 
{n} : n번
{n,} : n번 이상
{n, m} : n번 이상 m번 이하
() 괄호 안의 문자를 하나의 문자로 인식
| OR 연산
\d 숫자 문자 [0-9]
\D 숫자를 제외한 문자 [^0-9]
\w 알파벳이나 숫자 [a-zA-Z0-9]
\W 알파벳이나 숫자를 제외한 문자 [^\w]
\s 공백 문자 [\t\n\x0B\f\r]    //공백 여러개 : \s+
\S 공백 문자를 제외한 문자

 

※ ^의 위치에 따른 정규식의 차이
^[0-9] : 숫자로 시작 (^이 시작을 의미)
[^0-9] : 숫자가 아님 (^이 not을 의미)

 

개선 코드 (성공)

public boolean solution2(String s) {
	return s.matches("^[0-9]{4}|{6}$");
}

정규식 : ^[0-9]{4}|{6}$"
= 시작과 끝 사이가 오직 숫자[0-9]로만 구성되며, 4자리 혹은 6자리인 문자.

728x90
Comments