
https://www.acmicpc.net/problem/9996

- 오늘의 학습 키워드
한국이 그리울 땐 서버에 접속하지
- 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int fileCount = Integer.parseInt(sc.nextLine());
String pattern = sc.nextLine();
String[] filenames = new String[fileCount];
for (int i = 0; i < fileCount; i++) {
filenames[i] = sc.nextLine();
}
String[] results = solution(pattern, filenames);
for (String result : results) {
System.out.println(result);
}
}
private static String[] solution(String pattern, String[] filenames) {
String[] resultArray = new String[filenames.length];
String regex = pattern.replace("*", ".*");
for (int i = 0; i < filenames.length; i++) {
if (filenames[i].matches(regex)) {
resultArray[i] = "DA";
} else {
resultArray[i] = "NE";
}
}
return resultArray;
}
}
- 오늘의 회고
a*d
→ a.*d
이렇게 정규식으로 바꿔서 간단하게 풀 수 있었다.
.*은 아무 문자 0개 이상을 의미하기 때문에!
정규식을 사용하지 않고 별 하나를 기준으로 패턴을 접두사 + 접미사로 나눠서,
문자열이 그 둘로 시작하고 끝나는지만 체크하는 방법으로도 풀 수 있다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int fileCount = Integer.parseInt(sc.nextLine());
String pattern = sc.nextLine();
String[] filenames = new String[fileCount];
for (int i = 0; i < fileCount; i++) {
filenames[i] = sc.nextLine();
}
String[] results = solution(pattern, filenames);
for (String result : results) {
System.out.println(result);
}
}
private static String[] solution(String pattern, String[] filenames) {
String[] resultArray = new String[filenames.length];
String[] patternParts = pattern.split("\\*");
String prefix = patternParts[0];
String suffix = patternParts[1];
for (int i = 0; i < filenames.length; i++) {
String filename = filenames[i];
if (filename.length() < prefix.length() + suffix.length()) {
resultArray[i] = "NE";
} else if (filename.startsWith(prefix) && filename.endsWith(suffix)) {
resultArray[i] = "DA";
} else {
resultArray[i] = "NE";
}
}
return resultArray;
}
}
a*d
→ ["a", "d"]
이렇게 패턴을 suffix, prefix로 분리한 다음,
각 파일 이름을 순회하면서 그 이름이 prefix로 시작하고, suffix로 끝나는지 확인하는 것이다.
💡 파일 이름이 너무 짧은 경우는 접두사 + 접미사 자체가 들어갈 수 없기 때문에 무조건 "NE"를 반환한다.

속도는 접두사 + 접미사 비교 방식이 더 빠르다!
'📝 끄적끄적 > 항해99 코테 스터디' 카테고리의 다른 글
99클럽 코테 스터디 11일차 TIL + 과자 나눠주기 (0) | 2025.04.15 |
---|---|
99클럽 코테 스터디 10일차 TIL + 병든 나이트 (0) | 2025.04.12 |
99클럽 코테 스터디 9일차 TIL + 저울 (0) | 2025.04.10 |
99클럽 코테 스터디 7일차 TIL + 쇠막대기 (0) | 2025.04.09 |
99클럽 코테 스터디 6일차 TIL + 섬의 개수 (0) | 2025.04.08 |
99클럽 코테 스터디 2일차 TIL + 피보나치 비스무리한 수열 (0) | 2025.04.02 |