코딩테스트/BOJ

[BOJ] 9996 한국이 그리울 땐 서버에 접속하지 - JAVA

5월._. 2023. 6. 7.
728x90

1. 문제

 

9996번: 한국이 그리울 땐 서버에 접속하지

총 N개의 줄에 걸쳐서, 입력으로 주어진 i번째 파일 이름이 패턴과 일치하면 "DA", 일치하지 않으면 "NE"를 출력한다. 참고로, "DA"는 크로아티어어로 "YES"를, "NE"는 "NO"를 의미한다.

www.acmicpc.net

패턴은 알파벳 소문자 여러 개와 별표(*) 하나로 이루어진 문자열이다.

파일 이름이 패턴에 일치하려면, 패턴에 있는 별표를 알파벳 소문자로 이루어진 임의의 문자열로 변환해 파일 이름과 같게 만들 수 있어야 한다. 별표는 빈 문자열로 바꿀 수도 있다. 예를 들어, "abcd", "ad", "anestonestod"는 모두 패턴 "a*d"와 일치한다. 하지만, "bcd"는 일치하지 않는다.

패턴과 파일 이름이 모두 주어졌을 때, 각각의 파일 이름이 패턴과 일치하는지 아닌지를 구하는 프로그램을 작성하시오.


2. 풀이

1.  *을 .*로 교체해서 정규식으로 만든다.

2.  String의 matches를 사용해서 일치하는지 확인한다.

import java.io.*;

public class BOJ_9996_한국이그리울땐서버에접속하지 {
   public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      int N = Integer.parseInt(in.readLine());

      String regex = in.readLine().replace("*",".*");

      StringBuilder sb = new StringBuilder();
      for(int i=0;i<N;i++){
         if(in.readLine().matches(regex)) sb.append("DA\n");
         else sb.append("NE\n");
      }

      System.out.print(sb);
   }
}

3. 결과

처음에는 StringBuilder를 사용해서 한 글자씩 더해가면서 정규식을 만들었지만, 그 후에는 replace를 사용했다. 그 결고 ㅏ시간과 메모리가 조금 줄어들었다.

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 2607 비슷한 단어 - JAVA  (0) 2023.06.08
[BOJ] 1254 팰린드롬 만들기 - JAVA  (0) 2023.06.07
[BOJ] 1769 3의 배수 - JAVA  (0) 2023.06.06
[BOJ] 4358 생태학 - JAVA  (0) 2023.06.06
[BOJ] 2096 내려가기 - JAVA  (0) 2023.06.05

댓글