def solution(rsp):
# 가위 2 바위 0 보 5
# 바위 0 보 5 가위 2
rule = {"2":"0","0":"5","5":"2"}
answer=''.join(rule[i] for i in rsp)
return answer
내가 한 실수 (Miss)
replace의 체이닝 문제
# 가위 2 바위 0 보 5
# 바위 0 보 5 가위 2
answer = rsp.replace("2","0").replace("0","5").replace("5","2")
→ ❌ 왜 결과가 모두 2일까? (데이터 오염)
replace를 체이닝(.replace().replace())하면, 앞에서 바꾼 결과물이 다음 replace의 대상이 되어버립니다
예를 들어 rsp가 "2"(가위)일 때를 가정해 봅시다
.replace("2", "0"): "2"가 "0"으로 바뀝니다 (결과: "0").replace("0", "5"): 방금 바뀐 "0"이 다시 "5"로 바뀝니다 (결과: "5").replace("5", "2"): 또 방금 바뀐 "5"가 다시 "2"로 바뀝니다 (결과: "2")결국 모든 숫자가 마지막 단계인 "2"로 수렴!!
한 줄 팁 (Tip):
1:1 매핑 문제에서 딕셔너리는 '치트키'다! 더 빠른 방법을 원한다면 translate()를 활용할것!
translate() 활용 (치환의 끝판왕)문자열 내의 여러 문자를 한꺼번에 바꿀 때 사용하는 파이썬 내장 메서드
def solution(rsp):
# 변환 테이블 생성: "2"는 "0"으로, "0"은 "5"로, "5"는 "2"로
table = str.maketrans("205", "052")
return rsp.translate(table)
이 방식은 내부적으로 C로 구현되어 있어 속도가 매우 빠르고 코드가 극도로 간결함