오늘의 학습 키워드
- 문자열 처리
- 패턴 매칭
- startWith
- endsWith
공부한 내용 정리
이 문제는 주어진 패턴이 파일명과 일치하는지 확인하는 문제였다.
패턴에는 *가 하나 들어가고, 그 위치는 중간에만 있어서 쉽게 앞/뒤로 나눌 수 있다.
예를 들어 "a*d"라면 "a"로 시작하고 "d"로 끝나는 파일명은 모두 일치한다.
핵심은 이 두 조건을 동시에 만족해야 한다는 것과, 앞+뒤 패턴의 총 길이보다 파일명이 짧으면 아예 불가능하다는 점이었다.
그래서 String.startsWith(), String.endsWith()를 활용해서 풀었다.
소스코드
/*
입력 : N, pattern
로직 : 패턴을 *기준으로 분리
분리한 앞 뒤를 파일 이름이랑 비교
출력 : 맞으면 DA 틀리면 NE
*/
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 파일 개수 입력 받기
int N = Integer.parseInt(br.readLine());
// 패턴 입력
String pattern = br.readLine();
// *을 기준으로 앞/뒤 나누기
String[] patterns = pattern.split("\\*");
for(int i = 0; i < N; i ++) {
// 파일 이름 하나 입력 받음
String ary = br.readLine();
// 패턴의 앞 뒤와 일치하는지 비교
// 앞 패턴과 뒤 패턴의 총 길이보다 파일 이름이 짧으면 일치 불가.
if (ary.length() >= patterns[0].length() + patterns[1].length()
&& ary.startsWith(patterns[0])
&& ary.endsWith(patterns[1]))
System.out.println("DA");
else
System.out.println("NE");
}
}
}
오늘의 회고
• 어떤 문제가 있었고, 나는 어떤 시도를 했는지
처음에는 정규식을 써야 하나 고민했는데, 패턴이 * 하나만 포함되니까 굳이 정규식까지는 필요 없다고 생각했.
• 어떻게 해결했는지
split("\\*")으로 * 기준 앞/뒤 패턴을 나누고, startsWith()와 endsWith()로 조건을 만족하는지 체크했다.
그리고 앞+뒤보다 파일명이 짧은 경우는 무조건 "NE"로 처리해줘야 해서 그 조건도 추가했다.
처음에 이부분을 생각을 못해서 틀렸다.
• 무엇을 새롭게 알았는지
자바의 문자열 처리 메서드들이 실무에서도 꽤 유용하게 쓰일 수 있겠다는 걸 느꼈고, split()에서 *은 정규식 특수문자라서 반드시 \\*처럼 이스케이프 해줘야 한다는 걸 기억해야겠다.
• 내일 학습할 것은 무엇인지
내일은 BFS/DFS 문제를 풀어보면서 자료구조와 탐색 로직을 더 연습해 봐야겠다.
'99클럽 > 6기' 카테고리의 다른 글
| 99클럽 코테 스터디 10일차 TIL - 병든 나이트 (백준 1783번) (0) | 2025.04.11 |
|---|---|
| 제목: 99클럽 코테 스터디 9일차 TIL - 저울(백준 2437번) (1) | 2025.04.10 |
| 99클럽 코테 스터디 7일차 TIL - 쇠막대기 (백준 10799번) (0) | 2025.04.08 |
| 99클럽 코테 스터디 6일차 TIL - 섬의 개수 (백준 4963번) (0) | 2025.04.07 |
| 99클럽 코테 스터디 5일차 TIL - 수열 (백준 2559번) (0) | 2025.04.04 |