BOJ/String
[BOJ]9996번 한국이 그리울 땐 서버에 접속하지
J_Jayce
2021. 4. 8. 16:03
문제
9996번: 한국이 그리울 땐 서버에 접속하지
총 N개의 줄에 걸쳐서, 입력으로 주어진 i번째 파일 이름이 패턴과 일치하면 "DA", 일치하지 않으면 "NE"를 출력한다. 참고로, "DA"는 크로아티어어로 "YES"를, "NE"는 "NO"를 의미한다.
www.acmicpc.net
풀이
*풀이 중점*
1) *를 기준으로 양 옆의 기준 문자열들의 길이 합이 입력받은 문자열보다 크면 안된다.
예를 들어, abcd*abcd이고, 받은 문자열이 abcd이면 올바른 것으로 나온다. 하지만 최소한 abcdabcd 길이 이상으로 나 와야 하기에 이는 안되는 경우이다.
2) 1) 조건을 만족하면 * 기준으로 양 옆의 문자열 길이를 활용해서 입력받은 문자열을 쪼개서 비교해본다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.*;
public class BOJ_9996 {
static boolean is_correct(String str, String front, String rear){
int fLen = front.length(), rLen = rear.length();
if(str.length() < fLen+rLen)
return false;
String s_front = str.substring(0,fLen);
String s_rear = str.substring(str.length()-rLen,str.length());
//System.out.println("s_front : "+s_front+", s_rear : "+s_rear);
if(front.equals(s_front) && rear.equals(s_rear))
return true;
return false;
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
StringTokenizer pattern = new StringTokenizer(br.readLine(),"*");
String front = pattern.nextToken(), rear = pattern.nextToken();
for(int i=0;i<N;i++){
String str = br.readLine();
if(is_correct(str,front, rear))
sb.append("DA\n");
else
sb.append("NE\n");
}
System.out.println(sb);
}
}