알고리즘/백준

[백준/Python] 9996번: 한국이 그리울 땐 서버에 접속하지

이우열 2023. 3. 22. 22:06
728x90

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

 

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

총 N개의 줄에 걸쳐서, 입력으로 주어진 i번째 파일 이름이 패턴과 일치하면 "DA", 일치하지 않으면 "NE"를 출력한다. 참고로, "DA"는 크로아티어어로 "YES"를, "NE"는 "NO"를 의미한다.

www.acmicpc.net

 



문제 분석

패턴과 파일 이름의 일치 여부를 판단하여 "DA", "NE"를 출력하는 문제이다.

패턴은 "a*d"와 같이 문자열과 별표로 이루어져 있고 별표는 하나, 문자열의 길이는 100을 넘지 않는다.

 

즉, 패턴은 "abc*abc"와 같이 별표의 앞뒤로 총 길이가 100을 넘지 않는 길이를 가진 문자열이 오게 된다.

 

별표에는 공백, 한 문자, 문자열 등 있거나 없거나 많거나의 종류가 올 수 있는데

이를 다시 이해하면 파일 이름은 별표를 기준으로 별표 앞에 오는 문자열로 시작하고 별표 뒤에 오는 문자열로 끝나야 한다.

패턴과 일치하는 파일 이름은 별표 앞에 오는 문자열로 시작해 별표를 거쳐 별표 뒤에 오는 문자열로 끝나게 되는 것이다.

 

이 때, 별표를 제외한 패턴의 길이와 파일 이름의 길이를 비교하여 파일 이름의 길이가 패턴의 길이보다 크거나 같아야 한다.

 

만약 "a*a"를 패턴으로 할 때, 파일 이름이 "a"인 경우

패턴의 별표 앞에 있는 문자열은 "a", 별표 뒤에 있는 문자열도 "a"가 된다.

그리고 파일 이름은 "a"이기 때문에 얼핏 보면 맞는거처럼 보이지만

패턴이 의미하는 것은 "a"로 시작해서 "a"로 끝나지만 "a"가 두개 존재하고 양 끝에 존재해야 한다는 의미이다.

 


코드

더보기
n = int(input())
pattern = input().split("*")
l = len(pattern[0]) + len(pattern[1])

for _ in range(n):
    arr = input()

    if len(arr) >= l and arr.startswith(pattern[0]) and arr.endswith(pattern[1]):
        print("DA")
    else:
        print("NE")
728x90