99클럽 코테 스터디 8일차 TIL - 한국이 그리울 땐 서버에 접속하지 (문자열)

Hyejin·2025년 4월 9일
0

99Club

목록 보기
9/21
post-thumbnail

문제: https://www.acmicpc.net/problem/9996
알고리즘 분류: 정규 표현식, 문자열

문제 정의

패턴은 알파벳 소문자와 별표(*) 하나로 구성됨
파일 이름은 알파벳 소문자로만 구성됨
별표는 임의의 문자열(빈 문자열 포함)로 대체 가능
각 파일 이름이 패턴과 일치하는지 확인해야 함

문제 파악

패턴은 별표를 기준으로 앞부분(prefix)과 뒷부분(suffix)으로 나눌 수 있음
파일 이름이 패턴과 일치하려면:

파일 이름이 패턴의 앞부분으로 시작해야 함
파일 이름이 패턴의 뒷부분으로 끝나야 함
파일 이름의 길이가 최소한 (prefix + suffix) 이상이어야 함

접근 방법

패턴을 별표(*)를 기준으로 앞부분과 뒷부분으로 분리
각 파일 이름에 대해:

파일 이름이 패턴의 앞부분으로 시작하는지 확인
파일 이름이 패턴의 뒷부분으로 끝나는지 확인
중간 부분이 겹치지 않는지 확인 (prefixsuffix가 겹치는 경우 고려)

내 코드

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim();

const lines = input.split('\n');
const n = parseInt(lines[0]);
const pattern = lines[1];

const parts = pattern.split('*');
const prefix = parts[0];
const suffix = parts[1];

const results = [];

for (let i = 0; i < n; i++) {
  const filename = lines[i + 2];
  
  // 파일 이름 길이가 prefix + suffix보다 짧으면 패턴과 일치 불가능
  if (filename.length < prefix.length + suffix.length) {
    results.push("NE");
    continue;
  }
  
  // 파일 이름이 패턴의 앞부분으로 시작하는지 확인
  if (!filename.startsWith(prefix)) {
    results.push("NE");
    continue;
  }
  
  // 파일 이름이 패턴의 뒷부분으로 끝나는지 확인
  if (!filename.endsWith(suffix)) {
    results.push("NE");
    continue;
  }
  
  // 모든 조건을 만족하면 패턴과 일치
  results.push("DA");
}

console.log(results.join('\n'));

참고
https://bedecked-operation-4d1.notion.site/99-8-TIL-1d0eb405261e80f68c5ed675c161efe7

0개의 댓글