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

deun·2025년 4월 9일
1

99클럽 코테 스터디

목록 보기
8/20

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

접근 방식

  • 패턴에는 알파벳 소문자 여러 개와 * 하나가 주어짐
  • *는 문자열 사이에 위치하며, 빈 문자열 포함 아무 문자열로 치환 가능
    • 따라서 * 기준으로 start와 end로 나눈 후, 파일 이름이 start로 시작하고 end로 끝나는지 확인하는 방식으로 구현할 수 있음
    • 단, 전체 길이가 start + end보다 작다면 무조건 불일치 → "NE"
      • 문자열이 ab일 때 패턴이 ab*b라면 길이를 확인하지 않았을 때 일치한다고 판단됨

구현

const fs = require("fs")
const [n, pattern, ...arr] = fs.readFileSync("/dev/stdin").toString().trim().split("\n")

const [start, end] = pattern.split("*")
for (let i = 0; i < n; i++) {
  if (arr[i].length < start.length + end.length) {
    console.log("NE")
  } else {
    console.log(arr[i].startsWith(start) && arr[i].endsWith(end) ? "DA" : "NE")
  }
}

정규식으로 구현하기

  • 정규식으로 구현하면 좀 더 간단하게 풀이할 수 있음
  • ^는 시작을, .은 반복을, $은 끝을 나타냄
    • 정규식에서는 .**의 역할을 정확히 대체함
const fs = require("fs")
const [n, pattern, ...arr] = fs.readFileSync("/dev/stdin").toString().trim().split("\n")

const regex = new RegExp(`^${pattern.replace("*", ".*")}$`)
for (let i = 0; i < n; i++) {
  console.log(regex.test(arr[i]) ? "DA" : "NE")
}
profile
https://deun.dev

0개의 댓글