[백준] 4659

AI·2025년 9월 4일

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으로 작성을 안하면 컴파일 에러가 발생한다

0개의 댓글