TIL (Today I Learned)

오늘 공부한 내용

오늘은 문자열 처리와 관련된 문제를 해결하며 문자열의 연속된 부분 문자열 찾기문자열 비교 시 대소문자 무시 처리에 대해 배웠습니다. 이를 기반으로 아래의 코드를 작성하였습니다.

문제 요구 사항

  1. 문자열 myString 내 연속된 부분 문자열 중 pat이 존재하는지 확인.
  2. 대소문자를 구분하지 않음.
  3. myString의 길이가 pat보다 짧으면 바로 0을 리턴.

구현 코드

def solution(myString, pat):
    # 1. 길이 비교 후 바로 0 리턴
    if len(pat) > len(myString):
        return 0 
    
    # 2. 대소문자를 무시한 문자열 비교
    if pat.lower() in myString.lower():
        answer = 1
    else:
        answer = 0
        
    return answer

코드 로직

  1. 길이 비교
    myString의 길이가 pat보다 짧다면 부분 문자열 비교가 불가능하므로 0을 리턴합니다.
  2. 대소문자를 무시한 비교
    문자열 비교 시 대소문자를 구분하지 않기 위해 lower() 메서드를 사용하여 둘 다 소문자로 변환한 후 비교합니다.
  3. 결과 리턴
    비교 결과 pat이 myString 내에 존재하면 1, 존재하지 않으면 0을 리턴합니다.

개선점

  1. 가독성 향상
    • answer 변수를 굳이 사용하지 않아도, 조건에 따라 바로 값을 리턴하는 방식으로 코드를 간결화할 수 있습니다.
    def solution(myString, pat):
        if len(pat) > len(myString):
            return 0
        return 1 if pat.lower() in myString.lower() else 0
    
  2. 주석 정리
    • 코드 내 주석을 좀 더 간결하고 명확하게 정리하여 가독성을 높일 필요가 있습니다.
  3. 테스트 케이스 검증 강화
    • 문제에서 제공된 입출력 예제 외에도 더 다양한 케이스를 테스트하여 경계 조건이나 예외 상황을 확인하는 것이 필요합니다.

오늘 느낀 점

  • 문자열 비교에서 대소문자 처리는 lower() 또는 upper()를 활용하면 간단히 해결할 수 있음을 배웠습니다.
  • 간결하고 효율적인 코드를 작성하기 위해 변수 사용을 줄이고 조건에 따라 바로 값을 리턴하는 방식을 고려해야 함을 느꼈습니다.
  • 다양한 테스트 케이스를 추가해 코드를 검증하는 습관을 기르는 것이 중요하다고 생각했습니다.

개선 계획

  1. 테스트 케이스 추가
    • 길이가 동일하거나 비슷한 문자열에 대해 정확히 동작하는지 확인하기 위해 다양한 테스트 케이스를 추가하겠습니다.
    • 예: 대소문자 혼합된 경우, 문자열이 매우 긴 경우 등.
  2. 에러 핸들링 강화
    • 입력값이 비정상적인 경우를 처리하기 위한 방어 코드를 추가해볼 예정입니다.
  3. 더 간결한 코드 연습
    • 코드의 가독성을 높이면서도 효율적인 방법을 찾아 적용하도록 연습을 지속하겠습니다.

 

+ Recent posts