Day17 문자열

  • 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기
  • 문자열이 몇 번 등장하는지 세기
  • ad 제거하기
  • 공백으로 구분하기 1
  • 공백으로 구분하기 2

특정 문자열로 끝나는 가장 긴 부분 문자열 찾기

문제 설명

문자열 myString과 pat가 주어집니다. myString의 부분 문자열중 pat로 끝나는 가장 긴 부분 문자열을 찾아서 return 하는 solution 함수를 완성해 주세요.

 

def solution(myString, pat):
    answer = ''
    idx = 0
    if pat in myString:
        idx = myString.rindex(pat) + len(pat)-1
    answer = myString[:idx+1]
    return answer

myString에서 pat을 찾고 시작 인덱스가 아니라 끝 인덱스를 알아야 하니까 pat의 길이에서 -1 값으로 idx 를 찾았다

이후 처음부터 idx까지 슬라이싱

def solution(myString, pat):
    answer = myString[:myString.rindex(pat) + len(pat)]
    return answer

뭔가 비슷한듯 다른 다른 사람들 풀이가 많아서 내 코드를 수정해봤는데 5-6번째 줄 코드를 합치면

저렇게나 간략해진다. if문 굳이 쓸 필요가 없었다.


문자열이 몇 번 등장하는지 세기

문제 설명

문자열 myString과 pat이 주어집니다. myString에서 pat이 등장하는 횟수를 return 하는 solution 함수를 완성해 주세요.

 

def solution(myString, pat):
    answer = 0
    for i in range(len(myString)):
        if myString[i:i+len(pat)] == pat:
            answer +=1
    return answer

myString을 순회하면서 pat의 길이만큼의 문자열을 pat이랑 비교한 후 일치하면 +1

find랑 rfind로 풀어보려고 했는데 앞, 뒤 제외한 중간에서 겹치는 문자열을 찾을 수가 없어서 포기 ..

def solution(myString, pat):
    answer = 0
    for i, x in enumerate(myString) :
        if myString[i:].startswith(pat) :
            answer += 1
    return answer
startswith() 함수
문자열이 지정된 접두사(prefix)로 시작하는지 여부를 확인하기 위한 파이썬의 문자열 메서드


ad 제거하기

문제 설명

문자열 배열 strArr가 주어집니다. 배열 내의 문자열 중 "ad"라는 부분 문자열을 포함하고 있는 모든 문자열을 제거하고 남은 문자열을 순서를 유지하여 배열로 return 하는 solution 함수를 완성해 주세요.

 

def solution(strArr):
    answer = []
    for idx, value in enumerate(strArr):
        if 'ad' not in value:
            answer.append(strArr[idx])

    return answer

not in 연산자를 사용해서 ad가 없으면 배열 answer에 추가, 있으면 pass


공백으로 구분하기 1

문제 설명

단어가 공백 한 개로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

 

def solution(my_string):
    return my_string.split(' ')

my_string 문자열을 공백으로 구분하여 리스트로 반환

split() 함수
문자열을 특정 구분자(delimiter)를 기준으로 나누어 리스트로 반환하는 파이썬의 문자열 메서드

공백으로 구분하기 2

문제 설명

단어가 공백 한 개 이상으로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

def solution(my_string):
    return my_string.split()

응?

 

split(' ')과 split()의 차이는

split(' ')을 사용하면 공백으로 나누다 연속된 공백이 있을 때 공백(빈 문자열)까지 리스트에 포함된다.

split()은 연속된 공백도 하나의 공백으로 간주하여 나눈다.

결론은 공백으로 구분하기1도 split() 사용해도 정답이었음

 

근데 공백으로 구분하기2에는 split(' ') 사용하면 안된다.

연속된 공백이 있으면 공백을 빈 문자열로 배열에 포함하여 리스트를 생성하기 때문


 

+ Recent posts