728x90
문제
2개의 문자열 s와 t가 주어졌을 때 s가 t의 부분 문자열인지 판단하는 프로그램을 작성하라.
부분 문자열을 가지고 있는지 판단하는 방법은 t에서 몇 개의 문자를 제거하고 이를 순서를 바꾸지 않고 합쳤을 경우 s가 되는 경우를 이야기 한다.
https://www.acmicpc.net/problem/6550
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열 s 와 t가 빈칸을 사이에 두고 들어온다.
s와 t의 길이는 10만을 넘지 않는다.
출력
입력된 s와 t의 순서대로 s가 t의 부분 문자열인 경우 Yes라 출력하고 아닐 경우 No라고 출력한다.
예제
# input
sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter
# output
Yes
No
Yes
No
문제 풀이
import sys
input = sys.stdin.readline
while True:
try:
s, t = input().split()
chars_to_match = list(s)
for char in t:
# chars_to_match가 비어있지 않고,
# t의 현재 문자가 chars_to_match의 첫 번째 문자와 같다면
# chars_to_match의 해당 문자를 제거하여 다음 문자로 넘어감
if chars_to_match and chars_to_match[0] == char:
chars_to_match.pop(0)
# chars_to_match가 비어 있으면 s가 t의 부분 문자열
print('Yes' if not chars_to_match else 'No')
except:
break
파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.
728x90