level0_문자열 바꿔서 찾기

2024. 12. 10. 20:52파이썬_알고리즘(코딩테스트)/level0

내가 제출한 코드

def solution(myString, pat):
    my = ""
    for i in myString:
        if i == "A":
            my += "B"
        else:
            my += "A"
    if pat in my:
        return 1
    else:   
        return 0
  • my는 변환된 문자열을 저장하기 위한 빈 문자열을 선언한다.
  • 현재 문자가 "A"인 경우, "B"로 변환하여 my에 추가한다.
  • else
    • 반대로 현자 문자가 "B"인 경우," A"로 변환하여 my에 추가한다.
  • if pat in transformed:
    • 만약 변환된 문자열 my 안에 패턴 문자열 pat이 포함되어 있는 경우는 1을, 그렇지 않을 경우에는 0을 반환한다.

다른 사람이 제출한 코드

def solution(myString, pat):
    return int(pat in myString.replace('A', 'C').replace('B', 'A').replace('C', 'B'))
  • myString.replace('A', 'C')
    • 문자열의 모든 'A'를 'C'로 바꿔준다.
  • .replace('B','A')
    • 모든 'B'를 'A'로 바꿔준다.
  • .replace('C','B')
    • 모든 'C'를 'B'로 바꿔준다.
  • pat in  변환된 문자열:
    • 변환된 문자열에 pat이 포함되어 있으면 True(1), 포함되어 있지 않으면 False(0)를 반환한다.

 

 

근데 왜 a를 그냥 b로 바로 안바꾸고 c를 만들어 준 이유가 뭘까?

-> 코드에서 문자 A를 B로 바로 바꾸지 않고 중간 단계로 C를 거치는 이유는 문자 간 변환 충돌을 방지하기 위해서이다.

 

myString = "AB"
# 의도한 변환
# A → C → B
# B → A
# 결과: "BA"

# A → B로 바로 바꿔본다면:
myString = "AB"
myString = myString.replace('A', 'B')  # "BB"
myString = myString.replace('B', 'A')  # "AA"
# 결과: "AA" (원래 의도한 변환 "BA"와 다름)