개발 공부용

문자열 | 1213. [S/W 문제해결 기본] 3일차 - String 본문

코딩 테스트

문자열 | 1213. [S/W 문제해결 기본] 3일차 - String

솝제로 2025. 11. 21. 11:27
문제
 

SW Expert Academy

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

swexpertacademy.com

 

주어지는 영어 문장에서 특정한 문자열의 개수를 반환하는 프로그램을 작성하여라

Starteatingwellwiththeseeighttipsforhealthyeating,whichcoverthebasicsofahealthydietandgoodnutrition.

위 문장에서 ti를 찾는 경우 답은 4이다.

 

입력
  • 총 10개의 테스트 케이스
  • 첫 줄: 테스트 케이스 번호
  • 두번째 줄: 찾을 문자열
  • 세번째 줄: 영어 문장
1
ti
Starteatingwellwiththeseeighttipsforhealthyeating,whichcoverthebasics ...
2
...

 

출력
#{테스트 케이스 번호} {답}
#1 4
#2 2

 

 

풀이

 

(처음 풀이)

for i in range(10):
    testNum = input().strip()
    findSen = input().strip()
    sentence = input().strip()
    
    cnt = 0
    
    for j in range(len(sentence)):
        sen = sentence[j:j+len(findSen)]
        if sen == findSen:
            cnt += 1
    
    print(f"#{testNum} {cnt}")

 

리스트 슬라이스로 j부터 j+len(찾는 문자열)을 잘라 찾는 문자열과 같은 경우를 일일이 찾았다.

 

 

(최종 풀이)

for i in range(10):
    testNum = input().strip()
    findSen = input().strip()
    sentence = input().strip()
     
    cnt = 0
    start = 0
 
    while True:
        idx = sentence.find(findSen, start)
        if idx == -1:
            break
        cnt += 1
        start = idx + 1
        
    print(f"#{testNum} {cnt}")

 

리스트 슬라이스를 사용하지 않고 find() 함수를 사용하여 찾는 문자열이 있는지 확인했다.

find() 함수를 사용하면 start에서부터 findSen을 찾고, 있는 경우 해당 문자열이 시작되는 인덱스를 반환한다.

따라서 -1을 반환한 경우는 해당 문자열을 찾지 못한 것이므로 반복을 중단한다.

그 외의 경우 문자열을 찾고 인덱스를 반환한 것이므로, 다음 경우의 수를 찾기 위해 해당 인덱스+1로 시작점을 잡고 반복한다.