coding test

[파이썬] 4864. 문자열 비교

잔망루피 2021. 1. 8. 18:34

swexpertacademy.com/main/learn/course/lectureProblemViewer.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

두 개의 문자열 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는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

입력 출력
3
XYPV
EOGGXYPVSY
STJJ
HOFSTJPVPP
ZYJZXZTIBSDG
TTXGZYJZXZTIBSDGWQLW
#1 1
#2 0
#3 1

 

🎀 나의 풀이

 

T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    str1=input()		# 첫 번째 문자열
    str2=input()		# 두 번째 문자열
    result=0
    
    if str1 in str2:	# 첫 번째 문자열이 두 번째 문자열에 있으면 1을 출력
        result=1
        
    print('#%d %d' %(test_case, result))

 

in을 사용해서 쉽게 풀 수 있던 문제였다.

 

다른사람 풀이

 

def solution(pettern, string):
    n, m = len(string), len(pettern)
    for i in range(n - m + 1):
        if pettern == string[i:i+m]:
            return 1
    return 0


def main():
    test_cases = int(input())
    for test_case in range(test_cases):
        pettern, string = input(), input()
        print(f"#{test_case + 1} {solution(pettern, string)}")


if __name__ == '__main__':
    main()

 

문자열 비교 함수를 만든 풀이다.

string을 pattern의 길이만큼 슬라이싱하면서 첫 번째 문자열이 두 번째 문자열에 있는지 찾는다.

 

T = int(input())

for t_idx in range(1, T+1):
    str1 = input()
    str2 = input()

    if str1 in str2:
        print(f'#{t_idx} 1')
    else:
        print(f'#{t_idx} 0')

 

나처럼 in을 써서 문제를 해결한 풀이.

반응형

'coding test' 카테고리의 다른 글

[파이썬] 4865. 글자수  (0) 2021.01.11
[파이썬] 4861. 회문  (0) 2021.01.08
[파이썬] 4843. 특별한 정렬  (0) 2021.01.08
[파이썬] 4839. 이진탐색  (0) 2021.01.07
[파이썬] 4837. 부분집합의 합  (0) 2021.01.06