Algorithm/Baekjoon
[백준 2954 : JAVA] 창영이의 일기장 / 정규 표현식
팡트루야
2021. 3. 22. 20:23
문제
풀이
다른 분들은 어떤 식으로 풀었나 검색해보니 정규 표현식으로 푼 풀이는 없길래 도움이 되었으면 하는 마음으로 올려본다..!
찾아야할 패턴은 모음 + 'p' + 모음 이다. 만약 세 문자를 하나로 처리한다면, 대체해야할 모음을 적어줄 수가 없기 때문에 각자 처리한다.
예를 들면, apa -> a 로 바꿔줘야하는데, apa를 하나로 보면 바꿔줘야할 문자를 적어줄 수가 없다. 그래서 한 단어씩 처리한다.
정규 표현식에서 제공하는 기능 중 사용한 기능은 다음과 같다.
- 논-캡쳐링을 의미하는 (?:) <--- ?와 : 사이에 특정 메타 문자를 추가할 수 있다.
- 캡쳐링을 의미하는 () <--- 캡쳐링을 통해 바꿔줘야할 문자를 쉽게 표현할 수 있게 된다. 첫 번째 캡쳐링이면 $1 와 같이 사용한다.
- 집합을 의미하는 []
- 바로 앞 패턴의 갯수를 의미하는 {} <--- 예를 들어, a{1} 이면 'a' 라는 문자가 1번 나온다는 의미이다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
str = str.replaceAll("(?:([a|e|i|o|u]{1})(p{1})([a|e|i|o|u{1}]))", "$1");
System.out.println(str);
}
}