CodingTest/Baekjoon

[baekjoon] 백준 9996번(파이썬): 한국이 그리울 땐 서버에 접속하지

JunJangE 2022. 1. 9. 11:47

문제

 

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

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

www.acmicpc.net

알고리즘

- "*" 기준으로 왼쪽 문자열과 오른쪽 문자열로 나눈다.

- 반복문을 통해 파일의 이름을 확인한다.

- 파일 이름의 길이가 왼쪽, 오른쪽 문자열의 길이보다 작으면 패턴이 일치할 수 없다.

- 왼쪽 문자열과 파일의 왼쪽 문자열만큼 자른 문자열이 같고, 오른쪽 문자열과 파일의 오른쪽 문자열만큼 자른 문자열이 같으면 패턴일 일치한 것이다.

코드

import sys

n = int(sys.stdin.readline())

pattern = list(map(str, sys.stdin.readline().split("*"))) # * 기준으로 왼쪽 문자열과 오른쪽 문자열로 나눈다.
left = pattern[0].strip()  # 왼쪽 문자열
right = pattern[1].rstrip("\n") # 오른쪽 문자열

# 반복문을 통해 파일의 이름을 확인
for _ in range(n):
    file = list(map(str, sys.stdin.readline().rstrip("\n")))

    # 파일 이름의 길이가 왼쪽, 오른쪽 문자열의 길이보다 작으면 패턴이 일치 할 수 없다.
    if len(file) >= len(left) + len(right):

        # 왼쪽 문자열과 파일의 왼쪽 문자열만큼 자른 문자열이 같고, 오른쪽 문자열과 파일의 오른쪽 문자열만큼 자른 문자열이 같을 경우 패턴일 일치하는 것
        if left == "".join(file[:len(left)]) and right == "".join(file[len(file) - len(right):]):
            print("DA")

        else:
            print("NE")
    else:
        print("NE")

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com