[백준] 9996 - 한국이 그리울 땐 서버에 접속하지
처음엔 뭐야 쉬운 문제네~ 하고 풀었는데 자꾸 60% 대에서 틀렸습니다가 나와서 결국 반례 푸는 법을 찾아봤던 문제.
어떤 반례가 있냐하면, 예를 들어 주어진 패턴이 'ab*bc' 이고, 주어진 파일 이름이 'abc'인 경우에 이 파일의 이름은 ab로 시작하는 것도 맞고 bc로 끝나는 것도 맞지만 'ab*bc' 패턴과는 일치하지 않는다.
그래서 단순히 패턴의 시작과 끝 문자열과 파일 이름의 앞뒤 문자열을 비교만 하면 안되고 파일 이름의 길이가 *을 제외한 패턴 문자열의 길이와 같거나 큰지도 체크해줘야한다.
다음 코드에서 'patternString.length()-1 <= input.length()'에 해당하는 부분이 그것이다.
// 9996 - 한국이 그리울 땐 서버에 접속하지
public class Main {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String patternString = br.readLine();
String[] pattern = patternString.split("\\*");
for (int i = 0; i < N; i++) {
String input = br.readLine();
int i1 = input.indexOf(pattern[0]);
int i2 = input.lastIndexOf(pattern[1]);
bw.write(patternString.length()-1 <= input.length() && i1 == 0 && i2 == input.length() - pattern[1].length() ? "DA" : "NE");
bw.write("\n");
}
br.close();
bw.flush();
bw.close();
}
}