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

한국이 그리울 땐 서버에 접속하지 문제 바로 가기

풀이 날짜: 2026-01-30

baekjoon 알고리즘 문제 풀이

풀이 코드


import sys
input = sys.stdin.readline

n = int(input())
pattern = input().strip()
front, back = pattern.split('*')

for _ in range(n):
    file = input().strip()

    if len(file) < len(front) + len(back):
        print("NE")
        continue

    if file.startswith(front) and file.endswith(back):
        print("DA")
    else:
        print("NE")
  

문제 핵심 요약

이 문제의 핵심은 패턴 문자열에 포함된 *를 기준으로 앞부분과 뒷부분을 분리한 뒤, 파일명이 해당 앞 문자열로 시작하고 뒤 문자열로 끝나는지를 확인하는 것이다. 단순히 첫 글자와 마지막 글자를 비교하는 방식으로는 문자열 전체 조건을 만족하는지 판단할 수 없다.


처음에 헷갈렸던 부분

처음에는 파일명의 첫 글자(file[0])와 마지막 글자(file[-1])만 비교하면 된다고 생각했다. 하지만 패턴의 앞·뒤는 한 글자가 아니라 문자열 전체라는 점을 놓쳐, 조건을 잘못 해석하고 있었다.


패턴 처리에서 중요한 포인트

패턴 문자열은 를 기준으로 정확히 두 부분으로 나뉜다. 따라서 pattern.split(‘‘)을 사용해 앞 문자열(front)과 뒤 문자열(back)을 분리하는 것이 문제 해결의 출발점이다.


startswith / endswith의 역할

startswith()와 endswith()는 문자열의 앞부분과 뒷부분을 비교하는 데 최적화된 함수다. 이 문제에서는 파일명이 front로 시작하고 back으로 끝나는지를 간결하고 정확하게 검사할 수 있다.


헷갈렸던 점 정리

길이 조건을 놓치기 쉬움

파일명이 front와 back을 모두 포함하려면 최소 길이가 len(front) + len(back) 이상이어야 한다. 이 조건을 체크하지 않으면, 실제로는 성립할 수 없는 짧은 문자열도 통과시키는 오류가 발생할 수 있다.