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"와 다름)'파이썬_알고리즘(코딩테스트) > level0' 카테고리의 다른 글
| level0_배열 회전시키기 (1) | 2024.12.10 |
|---|---|
| level0_주사위 게임1 (0) | 2024.12.04 |
| level0_부분 문자열 이어 붙여 문자열 만들기 (0) | 2024.12.03 |
| level0_배열의 원소 삭제하기 (1) | 2024.11.28 |
| level0_꼬리 문자열 (0) | 2024.11.28 |