728x90
1. 문제
패턴은 알파벳 소문자 여러 개와 별표(*) 하나로 이루어진 문자열이다.
파일 이름이 패턴에 일치하려면, 패턴에 있는 별표를 알파벳 소문자로 이루어진 임의의 문자열로 변환해 파일 이름과 같게 만들 수 있어야 한다. 별표는 빈 문자열로 바꿀 수도 있다. 예를 들어, "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 |
댓글