728x90
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
< 📝 문제 >
두 개의 문자열 str1과 str2가 주어진다. 문자열 str2 안에 str1과 일치하는 부분이 있는지 찾는 프로그램을 만드시오.
예를 들어 두 개의 문자열이 다음과 같이 주어질 때, 첫 문자열이 두 번째에 존재하면 1, 존재하지 않으면 0을 출력한다.
ABC
ZZZZZABCZZZZZ
두번째 문자열에 첫 번째 문자열과 일치하는 부분이 있으므로 1을 출력.
ABC
ZZZZAZBCZZZZZ
문자열이 일치하지 않으므로 0을 출력.
< ❓ 생각 >
0) 각 요소가 같은지 비교
1) 같으면 둘 다 다음 요소 비교
2) 다르면 str1은 첫 번째 요소로, str2는 직전 시작점의 다음 요소로 -> 0)으로
3) 모두 다 같으면 1 반환, 아니면 0 반환
< 💻 코드 >
def st(str1, str2):
# i : str1의 idx, j : str2의 idx
i = 0
j = 0
# str2 안에 str1과 일치하는 부분이 있으면 1, 아니면 0
# 각 요소 같은지 비교
# 같으면 둘다 다음 요소 비교
# str1의 마지막요소까지 다 같으면 1
# 다르면 str1은 첫번째로 str2는 직전 시작점 다음으로
while j < len(str2):
if str1[i] != str2[j]:
i = 0
j -= i
else:
i += 1
j += 1
# 검색 성공
if i == len(str1):
return 1
# 검색 실패
return 0
# T : 테스트 케이스 개수
T = int(input())
for tc in range(1,T+1):
# str2 안에 str1과 일치하는 부분이 있으면 1, 아니면 0
str1 = list(input())
str2 = list(input())
print(f'#{tc} {st(str1,str2)}')
< ❗ >
if문이 참일때, 거짓일 때 둘 다 실행해야 하는 코드의 위치 주의
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 4865. 글자수 - Python (0) | 2022.02.20 |
---|---|
[SWEA] 4861. 회문 - Python (0) | 2022.02.20 |
[SWEA] 1221. GNS - Python (0) | 2022.02.20 |
[SWEA] 1954. 달팽이 숫자 - Python (0) | 2022.02.20 |
[SWEA] 1210. Ladder1 - Python (0) | 2022.02.20 |
댓글