728x90
반응형
백준 6550번 Python
https://www.acmicpc.net/problem/6550
문제
2개의 문자열 s와 t가 주어졌을 때 s가 t의 부분 문자열인지 판단하는 프로그램을 작성하라.
부분 문자열을 가지고 있는지 판단하는 방법은 t에서 몇 개의 문자를 제거하고 이를 순서를 바꾸지 않고 합쳤을 경우 s가 되는 경우를 이야기한다.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열 s와 t가 빈칸을 사이에 두고 들어온다.
s와 t의 길이는 10만을 넘지 않는다.
출력
입력된 s와 t의 순서대로 s가 t의 부분 문자열인 경우 Yes라 출력하고 아닐 경우 No라고 출력한다.
반응형
풀이
""" 첫 번째 풀이 """
import sys
input = sys.stdin.readline
def is_in_string(s, t):
i, j = 0, 0
while i < len(s) and j < len(t):
if s[i] == t[j]:
i += 1
j += 1
if i == len(s):
print("Yes")
else:
print("No")
while True:
try:
s, t = map(str, input().rstrip().split())
is_in_string(s, t)
except:
break
728x90
문자열의 문자를 하나씩 비교하는 방법을 채택한 풀이이다.
is_in_string() 함수를 만들어 사용했다.
일단 제출해서 '통과!'는 받았지만 마음에 드는 코드는 아니다.
추후 코드를 다시 볼 때 좋지 않은 코드이다.
""" 두 번째 코드 """
import sys
input = sys.stdin.readline
def is_in_string(s, t):
idx = -1
for c in s:
idx = t.find(c,idx+1)
if idx == -1:
print("No")
return
print("Yes")
return
while True:
try:
s, t = map(str, input().rstrip().split())
is_in_string(s, t)
except:
break
해당 코드는 find 함수를 이용하여 문자를 찾는 지점을 설정해 주었다.
find 함수는 해당 문자를 문자열에서 찾지 못했을 때 -1을 반환하기 때문에 idx 변수가 -1이라면 No를 출력하도록 했다.
첫 번째 코드보다 의도한 바를 잘 전달할 수 있는 코드라고 생각하는 풀이이다.
728x90
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 백준 1912번 Python (0) | 2025.01.10 |
---|---|
[BOJ] 백준 2577번 Python (0) | 2025.01.09 |
[BOJ] 백준 16916번 Python (0) | 2025.01.08 |
[BOJ] 백준 15649번 Python (0) | 2025.01.07 |
[BOJ] 백준 2441번 Python (0) | 2025.01.05 |