문제


 

 

 

풀이


다른 분들은 어떤 식으로 풀었나 검색해보니 정규 표현식으로 푼 풀이는 없길래 도움이 되었으면 하는 마음으로 올려본다..!

 

찾아야할 패턴은 모음 + 'p' + 모음 이다. 만약 세 문자를 하나로 처리한다면, 대체해야할 모음을 적어줄 수가 없기 때문에 각자 처리한다.

예를 들면, apa -> a 로 바꿔줘야하는데, apa를 하나로 보면 바꿔줘야할 문자를 적어줄 수가 없다. 그래서 한 단어씩 처리한다.

 

정규 표현식에서 제공하는 기능 중 사용한 기능은 다음과 같다.

  1. 논-캡쳐링을 의미하는 (?:)    <--- ?와 : 사이에 특정 메타 문자를 추가할 수 있다.
  2. 캡쳐링을 의미하는 ()    <--- 캡쳐링을 통해 바꿔줘야할 문자를 쉽게 표현할 수 있게 된다. 첫 번째 캡쳐링이면 $1 와 같이 사용한다.
  3. 집합을 의미하는 []
  4. 바로 앞 패턴의 갯수를 의미하는 {}    <--- 예를 들어, 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);
    }
}