Post
부분 문자열(백준 6550번) | Gihun Son

부분 문자열(백준 6550번)

💡 **Check Point !

( 해당사항 ✓체크 )

  1. 막힘 없이 수월하게 풀린 문제인가? ✓

  2. 1시간이내로 풀렸던 문제인가?

  3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?

  4. 시간을 써도 도무지 풀 수 없는 문제인가?

  5. 솔루션을 찾아봤는가?


난이도 체감

  1. 최상

  2. 하✓


이해도

  1. 완벽히 이해✓

  2. 다소 헷갈리는 부분들이 있음

  3. 이해 못함

문제

2개의 문자열 s와 t가 주어졌을 때 s가 t의 부분 문자열인지 판단하는 프로그램을 작성하라. 부분 문자열을 가지고 있는지 판단하는 방법은 t에서 몇 개의 문자를 제거하고 이를 순서를 바꾸지 않고 합쳤을 경우 s가 되는 경우를 이야기 한다.

Untitled

나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys

while True:
    I=sys.stdin.readline().strip()
    if I=='':
        break
    S,T=I.split()
    start=T.find(S[0])
    if start==-1:
        print('No')
        continue
    count=1
    for s in S[1:]:
        for i in range(start+1,len(T)):
            if T[i]==s:
                start=i
                count+=1
                break
    if count==len(S):
        print('Yes')
    else:
        print('No')
  • 입력 S의 첫글자가 존재하는 T의 index를 먼저 찾고, start로 지정한다.
  • S[1:]에 해당하는 모든 문자에 대해, start지점 이후 같은 글자가 순서대로 존재하는지 찾는다.
  • 이때 start값은 각 문자의 index값으로 치환되고, count값이 len(S)와 같지 않으면 다 찾지 못한 것으로 간주한다.
This post is licensed under CC BY 4.0 by the author.