처음 문제를 보고 무슨 소린지 몰라서 백준 화면만 1시간째 노려봤었다.. ㅋㅋㅋㅋㅋㅋ

이해하면 풀이 방법은 어렵지 않다.

 

중앙에 있는 *기준으로 끝과 처음 문자가 있는지 찾아내서 if문을 걸어버리면 된다.

여기서 *은 공백이 될 수도 있고, 어떤 문자열이 될 수도 있다.

 

문제 풀이 방법은 두 가지가 있다.

1. substring을 이용한 문자열 풀이방법 (substring은 db에서 이용자의 생년월일을 찾아낼때 종종 쓴다!)

2. 정규식을 이용한 풀이방법 (정규식을 써도 어차피 split은 써야된다.)

 

나는 로그인, 회원가입 양식을 검사할때 자주 사용하는 

정규식을 사용해 풀어봤다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main_06 {
    public static void main(String[] args) throws IOException {
        
        //문제
        //1.첫째 줄에 파일의 개수 N이 주어진다
        //2.둘째 줄에는 패턴이 주어진다. 패턴은 알파벳 소문자와 별표 한 개로 이루어져 있다.
        //3.다음 N개 줄에는 파일 이름이 주어진다. 파일 이름은 알파벳 소문자로만 이루어져 있다.

        //풀이
        //1. 파일의 개수를 입력받는다.
        //2. *을 기준으로 문자열을 나눠 검사한다.
        //3. 패턴이 일치하면 DA, 일치하지 않으면 NE를 출력한다.
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 파일 개수 입력
        int tc = Integer.parseInt(br.readLine().trim());

        // 패턴 입력 (*을 기준으로 문자열 분리)
        String[] pattern = br.readLine().trim().split("\\*");

        // 정규 표현식 패턴 생성
        //Pattern.quote() 메소드를 사용하여 패턴 문자열을 정규 표현식으로 변환한다.
        // 특수 문자들을 이스케이프 처리하여 정확한 문자열 검색이 가능하도록 한다.
        //생성된 정규 표현식은 ^로 시작하고, 패턴의 첫 번째 요소로 시작하며,
        //*을 통해 임의의 문자열을 포함한 후, 패턴의 두 번째 요소로 끝나는 문자열을 검색한다.
        
        String regex = "^" + Pattern.quote(pattern[0]) + ".*" + Pattern.quote(pattern[1]) + "$";
        Pattern p = Pattern.compile(regex);

        // 각 파일 이름에 대해 패턴과 비교
        //m.find() 메소드는 문자열에서 정규 표현식과 일치하는 부분이 발견되면 true를 반환한다.
        // 이를 기반으로 "DA" 또는 "NE"를 출력한다.
        for (int i = 0; i < tc; i++) {
            String word = br.readLine().trim();
            Matcher m = p.matcher(word);
            if (m.find()) {
                System.out.println("DA");
            } else {
                System.out.println("NE");
            }
        }

        br.close();
    }
}

 

'자료구조 > 문제풀이' 카테고리의 다른 글

[백준 JAVA] 3613 Java vs C++  (2) 2024.07.03
[백준 JAVA] 1157 단어공부  (0) 2024.07.02
[백준 JAVA] 10798 세로읽기  (1) 2024.07.01
[백준 JAVA] 9046번 복호화  (1) 2024.07.01
[백준 JAVA] 11720번 숫자의 합  (0) 2024.07.01

+ Recent posts