본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[SWEA] 4864. 문자열 비교 - Python

by chaemj97 2022. 2. 20.
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

댓글