본문 바로가기
Algorithm

[Programmers] 181834.py l로 만들기

by roses16 2023. 6. 23.

처음에는 문제 그대로 풀고자 하였으나 제한 사항 1 ≤ myString ≤ 100,000 을 확인하고 반복문으로 myString을 전부 도는 것 보다 a~k까지만 도는 것이 더 효율적이라 판단하여 아래와 같이 해결.

 

def solution(myString):
    for c in "abcdefghijk":
        myString = myString.replace(c, "l")

    return myString

 

이후 아래와 같이 myString의 char를 모두 탐색하는 방식으로 작성하여 테스트해보니 위의 방식이 더 빠름을 확인할 수 있었다.

 

def solution(myString):
    return ''.join([ c if c > 'l' else 'l' for c in myString])

 

주어진 myString에 따라 후자가 더 빠를 수도 있을 것으로 예상했으나 모든 테스트 케이스 전자가 더 빨랐다.


다른 사람의 풀이에서 translate를 이용한 풀이를 발견했다.

replace를 사용한 방식과 속도가 유사했으나 가독성면에서는 translate를 사용한 방식이 더 좋아보였다.

def solution(myString):
    return myString.translate(str.maketrans('abcdefghijk', 'lllllllllll'))

 

💡 str.maketrans(x, y, z) : translate 함수에서 사용될 매핑 객체를 반환한다.
x : 찾을 문자. 문자열을 검색하는 것이 아니라 문자열 내 하나 하나의 문자를 검색한다.
y : 대체할 문자. 찾을 문자와 동일한 length를 가져야하며 각 index에 맞게 매핑된다.
z : optional, 제거할 문자