BOJ/String

[BOJ]9996번 한국이 그리울 땐 서버에 접속하지

J_Jayce 2021. 4. 8. 16:03

문제

www.acmicpc.net/problem/9996

 

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);
    }
}