https://www.acmicpc.net/problem/4659
문제를 보자마자 정규식이 생각이 나서, 정규식 규칙을 찾아보았다.
. : 임의의 문자 (줄바꿈 제외)
\d : 숫자 (0–9)
\w : 단어 문자 (영문자, 숫자, _)
\s : 공백 문자
+ : 1회 이상 반복
* : 0회 이상 반복
? : 0 또는 1회
{n,m} : n회 이상 m회 이하 반복
^ : 문자열 시작
$ : 문자열 끝
| : OR (또는)
문제에 나오는 3가지 조건에 해당하는 식을 만들어 확인을 해보았다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader((new InputStreamReader(System.in)));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input;
//정규식 - aeiou 하나 이상 포함, 모음 혹은 자음 연속 3개인지 확인, 같은 글자 연속 두번 안되나 ee,oo는 허용
// []+ == 1회 이상
// .* == 앞뒤로 다른 문자 올 수 있음
String p1 = ".*[aeiou]+.*";
// {3,} == 3회 이상
// ^ == not
String p2 = ".*([aeiou]{3,}|[^aeiou]{3,}).*";
// \1 == 바로 직전의 글자
String p3 = ".*([a-df-np-z])\\1.*";
while ((input = br.readLine()) != null){
if(input.trim().equals("end")) break;
if(input.matches(p1) && !input.matches(p2) && !input.matches(p3)){
bw.write("<"+input+"> is acceptable.\n");
} else{
bw.write("<"+input+"> is not acceptable.\n");
}
}
bw.flush();
br.close();
bw.close();
}
}
br, bw, Main으로 작성을 안하면 컴파일 에러가 발생한다