[Algorithm] 한국이 그리울 땐 서버에 접속하지

Jong Min ·2025년 4월 9일

Algorithm

목록 보기
20/30

🌐 백준 9996번 - 한국이 그리울 땐 서버에 접속하지

🔗 한국이 그리울 땐 서버에 접속하지


📌 문제 설명

서버에 접속하려면 사용자 이름이 정해진 패턴과 일치해야 한다.
패턴은 다음의 형태를 가진다:

  • 영어 소문자와 * 하나로만 구성된 문자열
  • *은 어떤 문자열(길이가 0 이상)로도 대체될 수 있음

N개의 문자열이 주어졌을 때, 각 문자열이 해당 패턴에 맞는지 판별하는 프로그램을 작성하자.


🎯 입력 조건

  • 첫째 줄: 정수 N (1 ≤ N ≤ 100)
  • 둘째 줄: 패턴 문자열 (길이 ≤ 100)
  • 이후 N개의 줄: 검사할 문자열 (길이 ≤ 100)

📝 예제

// 입력
3
a*d
abcd
anestonestod
facebook

//출력
DA
DA
NE

💡 해결 방법

패턴을 정규표현식으로 변환하여 해결할 수 있습니다.

  • * 문자를 [a-z]*로 변환
  • 전체 문자열과 일치해야 하므로 정규식 앞뒤에 ^, $를 붙여줌
  • Java의 Pattern.matches()를 이용해 간단히 일치 여부를 판별할 수 있습니다

✅ 코드 (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.regex.Pattern;

public class Main { 
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(bf.readLine());
        String str = bf.readLine();

        // 정규표현식 패턴 생성
        String pattern = "^";
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) != '*') {
                pattern += str.charAt(i);
            } else {
                pattern += "[a-z]*";
            }
        }
        pattern += "$";

        // 입력 문자열과 패턴 일치 여부 확인
        for (int i = 0; i < N; i++) {
            String name = bf.readLine();
            if (Pattern.matches(pattern, name)) {
                bw.write("DA\n");
            } else {
                bw.write("NE\n");
            }
        }

        bw.flush();
    }
}

🔑 핵심 포인트

  • *은 문자열로 대체 가능 → [a-z]*
  • 정규표현식에서는 문자열 전체와 일치시켜야 하므로 ^와 $ 필요
  • Pattern.matches() 메서드로 한 줄 코드로 매칭 처리 가능
profile
노력

0개의 댓글