백준 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) 이상이어야 한다. 이 조건을 체크하지 않으면, 실제로는 성립할 수 없는 짧은 문자열도 통과시키는 오류가 발생할 수 있다.