https://school.programmers.co.kr/learn/courses/30/lessons/120849
모음 제거
정규 표현식의 기초
(문제풀이 후기는 글 마지막에)
필요한 사전 지식
정규 표현식이 뭔지??
들어는 본적이 있는 정도
문제 설명
영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
my_string은 소문자와 공백으로 이루어져 있습니다.
1 ≤ my_string의 길이 ≤ 1,000
가장 먼저 생각난 방법은 for문을 통한 조건검사를 하는 것이다.
class Solution {
public String solution(String my_string) {
String answer ="";
for(int i=0; i<my_string.length(); i++){
char ch = my_string.charAt(i);
if(ch=='a'){
}else if(ch=='e'){
} ...
else{
answer+=ch;
}
return answer;
}
}
}
my_string의 모든 인덱스를 검사해서 aeiou면 정답이 되는 answer에 추가하지 않는것이다.
그런데 풀이가 직관적이고 효율적이라고 느껴지지 않았다
정규표현식을 쓰면 깔끔할거 같다는 생각이 들어서 정리를 해봤다.
정규 표현식 풀이
public class Solution {
public String solution(String my_string) {
// 정규 표현식을 사용하여 모음을 모두 제거합니다.
return my_string.replaceAll("[aeiou]", "");
}
}
풀이가 엄청 직관적이게 되었다.
정규표현식을 알고 있다면 위에 풀이보다 훨씬 더 가독성이 있을것이다
- 정규표현식은 replaceAll 함수를 통해 이용할 수 있다
- String.replaceAll(String regex, String replacement)
- 정규표현식 "[aeiou]"는 소문자 모음 "a","e","i","o","u"를 나타낸다
정규 표현식 기초
- [abc]: 'a', 'b', 'c' 중 하나
- ^[abc]: 'a', 'b', 'c' 중 하나가 오는 경우
- [^abc]: 'a', 'b', 'c'를 제외한 문자
- [a-zA-Z]: 모든 알파벳 문자 (대소문자 포함)
- .: 모든 문자
- \d: 숫자 ([0-9]와 동일)
- \D: 숫자가 아닌 문자 ([^0-9]와 동일)
- \s: 공백 문자 (스페이스, 탭 등)
- \S: 공백이 아닌 문자
- \w: 단어 문자 (알파벳, 숫자, 언더스코어)
- \W: 단어 문자가 아닌 것
- ^: 문자열의 시작
- $: 문자열의 끝
- \b: 단어 경계
- \B: 단어 경계가 아닌 곳
- (abc): 'abc'와 정확히 일치하는 그룹
- (a|b): 'a' 또는 'b'
자바에서 정규 표현식을 사용할 수 있는 몇 가지 메서드
자바에서는 java.util.regex 패키지를 사용하여 정규 표현식을 처리하는데
이 패키지에는 Pattern 클래스와 Matcher 클래스가 포함되어 있다.
- replaceAll: 문자열의 모든 부분을 정규 표현식에 맞게 대체합니다.
- matches: 문자열이 정규 표현식에 완전히 일치하는지 확인합니다.
- split: 문자열을 정규 표현식에 맞춰 분할합니다.
- Pattern 클래스와 Matcher 클래스: 보다 복잡한 정규 표현식 작업을 수행할 때 사용됩니다.
문제풀이 후기
정규표현식도 간단하지만은 않구나라고 느꼈다
정리하면서도 상당히 헷갈린다
정규표현식은 이미 프로그래머스 1회차 풀 때도 많이 봐왔었고 그때는 어찌저찌 다른 방식으로 풀거나
피해갔지만 이제는 피해갈 수 없고 해결하는 방법을 배워야 한다
정규 표현식은 매우 복잡한 패턴도 다룰 수 있을것이다
가장 먼저 떠오른게 이메일 유효성 검증이었다.
앞으로 알고리즘을 더 풀거나 프로젝트를 할 때 정규표현식을 쓰게 된다면 여기에 또 정리해야겠다.
추가)
return my_string.trim().split("[ ]+");
return myString.trim().split("\\s+");'프로그래머스' 카테고리의 다른 글
| 자바) 콜라츠 추측 (0) | 2024.07.19 |
|---|---|
| java) 순서쌍의 개수 (0) | 2024.07.13 |
| 프로그래머스)옹알이(2)-자바 (0) | 2024.06.19 |
| 프로그래머스,자바)자연수 뒤집어 배열로 만들기 (0) | 2024.04.17 |
| 프로그래머스,자바)ad제거하기 (0) | 2024.04.17 |