[코드카타] 문자열 바꿔서 찾기

seonyoung·2024년 9월 5일
0

📁 문제

문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.

📁 입출력 예

💡 내가 적은 정답

def solution(myString, pat):
    swapped_string = myString.translate(str.maketrans('AB', 'BA'))
    
    if pat in swapped_string:
        return 1
    else:
        return 0
  • str.maketrans() : 문자열 변환을 위한 변환 테이블을 생성하는 함수
    ㄴ 이 테이블은 두 개의 문자열을 매핑하여 각각의 문자를 다른 문자로 변환하는 데 사용됨
  • str.translate() : str.maketrans()로 생성된 변환 테이블을 사용하여 문자열의 문자를 실제로 변환하는 메서드

💡 또 다른 정답

def solution(myString, pat):    
    return int(pat.replace('A', 'b').replace('B', 'a') in myString.lower())
  • 엄청 짧은 정답을 발견했지만, replace 변경 문자에 왜 소문자를 넣은지와 lower()을 사용한 이유가 궁금해서 찾아보았음

📌 궁금증에 대한 결과

  • replace() 메서드에서 변환 문자에 소문자를 사용하는 이유는 변환된 문자열의 형식이 명확하고 예측 가능하게 하기 위함
    • 일관성: 'A'와 'B'를 서로 바꾸는 것이며, 결과적으로 소문자와 대문자를 혼합하지 않으므로 비교할 때 혼동이 없음
    • 가독성: 'a'와 'b'를 사용함으로써 변환된 문자열이 더 읽기 쉬울 수 있으며, 대소문자 구분 없이 바뀐 문자를 명확하게 식별할 수 있음
  • lower() 사용 이유는 대소문자 구분없이 일관되게 비교하기 위함
profile
원하는 바를 이루고 싶은 사람입니다.

0개의 댓글