[SWEA] 4864 문자열 비교

Yujin Jo·2022년 3월 28일
0

SWEA

목록 보기
12/22
post-thumbnail

문제 출처 : [SWEA] 4864 문자열 비교
learn -> course -> programming intermediate -> string -> 문자열 비교

문제

두 개의 문자열 str1과 str2가 주어진다. 문자열 str2 안에 str1과 일치하는 부분이 있는지 찾는 프로그램을 만드시오.

예를 들어 두 개의 문자열이 다음과 같이 주어질 때, 첫 문자열이 두번째에 존재하면 1, 존재하지 않으면 0을 출력한다.

ABC

ZZZZZABCZZZZZ

두번째 문자열에 첫번째 문자열과 일치하는 부분이 있으므로 1을 출력.

ABC

ZZZZAZBCZZZZZ

문자열이 일치하지 않으므로 0을 출력.

입력

첫 줄에 테스트 케이스 개수 T가 주어진다. (1≤T≤50)

다음 줄부터 테스트 케이스 별로 길이가 N인 문자열 str1과 길이가 M인 str2가 각각 다른 줄에 주어집니다. (5≤N≤100, 10≤M≤1000, N≤M)

출력

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

코드

T = int(input())
for tc in range(1, T + 1):
    str1 = input()    # 첫 번째 문자열
    str2 = input()    # 두 번째 문자열

    result = 0      # 결과값을 반환할 변수 초기화

    # 인덱스 밖으로 벗어나는 걸 방지하기 위해 range 범위 조정
    # 긴 문자열 전체를 돌면서 중복으로 count되는 걸 방지하기 위해 검사 구간 지정
    for i in range(len(str2) - len(str1) + 1):
        cnt = 0     # 연속되는 문자열의 수를 셀 변수 초기화
        # 짧은 문자열을 돌면서 긴 문자열과 비교
        for j in range(len(str1)):
            # 긴 문자열의 처음부터 한 칸씩 뒤로 가면서 검사
            if str1[j] == str2[i + j]:
                cnt += 1        # 두 문자열이 일치할 경우 cnt + 1
        # 검사 구간에 연속된 문자열의 수와 비교하는 문자열의 길이와 같을 경우 result = 1
        if cnt == len(str1):
            result = 1

    print('#{} {}'.format(tc, result))


풀이 방법

두 개의 문자열의 길이가 다르기 때문에 range 범위를 설정하는 것이 중요했다. 긴 문자열과 짧은 문자열을 비교하면서 일치할 경우 cnt를 세주었고 cnt와 짧은 문자열의 길이가 같으면 result에 1을 넣어 출력해주었다.

profile
일단 해보자

0개의 댓글