[ BOJ / Python ] 9996번 한국이 그리울 땐 서버에 접속하지

황승환·2021년 12월 19일
0

Python

목록 보기
58/498

이번 문제는 주어진 패턴에서 앞의 문자열과 뒤의 문자열을 따로 저장하여 입력되는 문자열에 다음 앞의 문자열과 뒤의 문자열이 모두 포함되어 있을 때에 DA를 출력하고 아닐 경우 NE를 출력하도록 하여 해결하였다. 계속해서 오답처리가 되어서 테스트 케이스를 찾아보던 중에

abcd*cdef
abcdef

와 같이 앞의 문자열과 뒤의 문자열에서 겹치는 부분이 있으면 NE를 출력해야 된다는 사실을 알게 되었고 문제를 해결할 수 있었다. 이 부분은 입력받은 문자열의 길이가 앞의 문자열의 길이와 뒤의 문자열의 길이의 합보다 작을 경우 NE를 출력하도록 하였다.

  • n을 입력받는다.
  • pattern을 입력받는다.
  • * 앞의 문자열을 저장할 문자열 front를 선언한다.
  • * 뒤의 문자열을 저장할 문자열 back을 선언한다.
  • pattern에서 *의 인덱스를 저장할 변수 idx를 0으로 정의한다.
  • 0부터 pattern의 길이까지 반복하는 i에 대한 for문을 돌린다.
    -> 만약 pattern[i]가 *라면 idx에 i+1을 저장해주고 반복문을 종료한다.
    -> 매 반복마다 front에 pattern[i]를 추가해준다.
  • idx부터 pattern의 길이까지 반복하는 i에 대한 for문을 돌린다.
    -> back에 pattern[i]를 더해준다.
  • 0부터 n까지 반복하는 i에 대한 for문을 돌린다.
    -> file을 입력받는다.
    -> 만약 file의 길이가 front의 길이와 back의 길이의 합보다 작다면 NE를 출력한다.
    -> 만약 file[:len(front)]가 front와 같고, file[-len(back):]가 back과 같다면 DA를 출력한다.
    -> 이 외에는 NE를 출력한다.

Code

n=int(input())
pattern=str(input())
front=''
back=''
idx=0
for i in range(len(pattern)):
    if pattern[i]=='*':
        idx=i+1
        break
    front+=pattern[i]
for i in range(idx, len(pattern)):
    back+=pattern[i]
for i in range(n):
    file=str(input())
    if len(file)<len(front)+len(back):
        print('NE')
    elif file[:len(front)]==front and file[-len(back):]==back:
        print('DA')
    else:
        print('NE')

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글