https://school.programmers.co.kr/learn/courses/30/lessons/120822
def solution(my_string):
return my_string[::-1]
reverse()
함수도 생각했지만, 단순히 반환만 하는 문제라 슬라이싱으로 반환했다.def solution(my_string):
my_list = list(my_string)
my_list.reverse()
answer = ''.join(my_list)
return answer
reverse()
함수를 사용하기 위해 리스트로 변환한 후에 answer
변수에 문자열을 담아 반환한 것으로 보인다.join()
함수를 사용해보지 않아서 for
문으로 저장하여 반환했을 것 같다...만약 리스트에 있는 문자를 문자열로 만들기 위해 for
문으로 연결한다면 O(n^2)
이 되어버린다.
파이썬에서 문자열은 불변 객체(Immutable Object)
이기 때문에 문자열을 변경할 때마다 새로운 문자열 객체가 생성된다.
따라서 매 반복마다 새로운 문자열이 생성되고 기존 문자열이 복사되므로, 전체 연산이 O(n^2)
이 된다.
이럴 때, join()
함수를 사용하면 O(n)
의 시간복잡도로 문자열을 얻을 수 있다.
파이썬 내부적으로 메모리를 한 번만 할당하여 문자열을 효율적으로 생성한다.
참고) https://stackoverflow.com/questions/37133547/time-complexity-of-string-concatenation-in-python
피드백은 언제나 환영입니다 :)