알고리즘

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

2023. 2. 8. 22:28
목차
  1. 1. 문제 출처
  2. 2. 풀이

1. 문제 출처

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

 

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

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

www.acmicpc.net

2. 풀이

2가지 방법이 존재한다.

1. 정규 표현식 미사용

# 테스트 케이스 개수 받기
N = int(input())

# 패턴 받은 후 *을 기준으로 자른다.
pattern = input().split("*")
# 패턴의 길이 구하기
pattern_len = len(pattern[0])+len(pattern[1])

def check():
	# 결과 리스트 초기화 
    result_list  = ["NE" for i in range(N)]
    # 테스트 케이스 수만큼 반복
    for idx in range(N):
        input_str = input()
        # 만약 문자열이  pattern[0]으로 시작, pattern[1]로 끝나고 문자열의 길이가 패턴의 총길이 보다 크거나 같으면
        if input_str.startswith(pattern[0]) & input_str.endswith(pattern[1]) & (len(input_str) >= pattern_len):
            # 결과를 "DA"로 바꾼다
            result_list[idx] = "DA"
    "결과 출력"
    for idx in range(N):
        print(result_list[idx])
            
check()

2. 정규 표현식  사용

import re
#위와 동일
N = int(input())

def check_regex():
    result_list  = ["NE" for i in range(N)]
    query = input().split("*")
    # 정구 표현식으로 query[0]와 query[1] 사이의 a부터 z까지의 임의의 문자가 한개 이상 존재한다
  	# 라는 뜻이다.
    query = query[0]+ "[a-z]*"+query[1]
    for idx in range(N):
        input_str = input()
        # fullmatch를 사용하여 전체 문자열이 해당 패턴을 만족하는지 구한다.
        if re.fullmatch(query ,input_str):
        	# 만족하면 결과를 "DA"로 바꾼다.
            result_list[idx] = "DA"
    for idx in range(N):
        print(result_list[idx])
   
check_regex()

쉽다고 생각했다가,  ab*bd를 받았을  때 abd를 만족하는 오류를 범하였다. 이 오류를 해결하기 위해 패턴으로 받은 문자열의 개수보다 짧은 문자열 일 때는 "NE"가 되도록 하였다.

위는 re 사용 아래는 미사용

그리고 위의 그림과 같이 re를 import 하여 사용한 것이 메모리와 속도에서 안 사용한 것에 밀렸다. 

다음 부터는 라이브러리를 가져다 쓰기 전에 없이도 가능한지 생각해 보고 사용해야겠다.

 

'알고리즘' 카테고리의 다른 글

1439-백준-뒤집기  (0) 2023.02.13
2618- 백준 - 경찰차  (0) 2023.02.10
1254-백준-팰린드롬 만들기  (0) 2023.02.09
9536-백준-여우는 어떻게 울지?  (0) 2023.02.06
백준-1141-접두사  (0) 2023.02.04
  • 1. 문제 출처
  • 2. 풀이
'알고리즘' 카테고리의 다른 글
  • 2618- 백준 - 경찰차
  • 1254-백준-팰린드롬 만들기
  • 9536-백준-여우는 어떻게 울지?
  • 백준-1141-접두사
easysheep
easysheep
easysheep
나의 개발자 일기
easysheep
전체
오늘
어제
  • 분류 전체보기 (95)
    • 파이썬 (7)
      • 자료형 (0)
      • matplotlib (2)
      • Tensorflow (1)
      • Selenium (1)
      • Numpy (2)
      • Pandas (1)
    • 장난감 프로젝트 (3)
    • AI_수학 (0)
      • 통계 (0)
    • 알고리즘 (63)
      • 브루트 포스 (3)
      • 그리드 알고리즘 (5)
      • 너비 우선 탐색(bfs) (12)
      • 깊이 우선 탐색(DFS) (1)
      • 최단 경로 구하기(플로이드 워셜) (1)
      • 동적 계획법(Dynamic Programming) (8)
      • Dijkstra algorithm(데이크스트라 알.. (6)
    • Backend (1)
      • Django (1)
    • 딥러닝 (1)
      • Regression(회귀) (0)
    • 머신러닝 (3)
      • Daycon (1)
      • 직접 구현 (1)
    • AWS (3)
    • DB (2)
      • MongoDB (2)
    • kubernetes (3)
    • Docker (4)
    • Stress Test Toll (0)
      • Jmeter (0)
      • nGrinder (0)
    • Ubuntu (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • grafana
  • 알고리즘
  • helm
  • ubuntu
  • BFS
  • 문자열
  • 너비 우선 탐색
  • error: version in "./docker-compose.yaml" is unsupported.
  • aws
  • 데이크스트라
  • Cannot stat file /proc/528/fd/0: Permission denied
  • mysql
  • 우분투에 헬름 설치
  • gradio
  • matplotlib
  • Docker
  • dynamic programming
  • validate service connection
  • 헬름 설치
  • 백준
  • 머신 러닝
  • Numpy
  • 2*n 타일링
  • heap
  • 파이썬
  • ML
  • error
  • Mac
  • Bind Mounts
  • Python

최근 댓글

최근 글

hELLO · Designed By 정상우.
easysheep
9996-백준-한국이 그리울 땐 서버에 접속하지
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.