오늘은 파이썬 알고리즘에 많이 사용되는
문자열 다루는 꿀팁 테크닉을 알려드리려고 합니다.
간단히 다음 장에서 결론부터 말씀드리고 설명 드리겠습니다.
1. 요약 정리
결론은 그냥 문자열을 +하는 것보다 join 함수를 쓰라는 것입니다.
시간 절약을 4배 이상 할 수 있습니다.
다만, 결론에서 말씀드렸다시피 "잘~" 쓰시는게 중요합니다.
다음 절에서 join 함수에 관해 설명 드리겠습니다.
2. join 함수란?
data = ['a', 'b', 'c']
print(''.join(data))
print('/'.join(data))
output
------------------------------------------
abc
a/b/c
join 함수는 리스트를 합쳐 문자열로 만들어주는 함수입니다.
그런데, join 함수는 구분자를 지정해 줄 수 있습니다.
위의 예시를 살펴보겠습니다.
''.join(data) -> data를 합치는데, 구분자를 공백으로 하니 'abc'가 나옵니다.
'/'.join(data) -> data를 합치는데 구분자는 슬래시(/)로 하니 'a/b/c'가 나옵니다.
보통 코딩테스트에서 join의 구분자는 공백과 함께 많이 쓰게 됩니다.
(문제에 따라 다르겠지만요)
3. join 함수 잘 쓰는 법
뜬금없이 퀴즈입니다.
join을 잘 쓰려면 어떻게 써야 할까요?
case1은 미리 리스트를 만들어 두고 나중에 join으로 한 번에 합치는 방식이고,
case2는 그 때 그 때 s라는 문자열에 join을 시켜버리는 방식입니다.
과연 정답은?
반응형
리스트를 미리 만들어 둔 Case1의 승리입니다.
둘 다 join 함수를 써서 시간 차이가 별로 나지 않긴 하네요 ^^
하지만 +=로 재보았을 때는 125초가 나왔답니다.
4. 왜 join이 +=보다 빠른가?
https://waymoot.org/home/python_string/
Efficient String Concatenation in Python
Efficient String Concatenation in Python An assessment of the performance of several methods Introduction Building long strings in the Python progamming language can sometimes result in very slow running code. In this article I investigate the computati
waymoot.org
왜 join이 +=보다 빠를까요?
결론부터 말씀드리면, new representation이 매 번 생기지 않기 때문이라고 합니다.
(representation: 객체를 print해보면 나오는 표현식의 일종)
+= 연산은 매 번 new representation을 생성합니다.
그리고 이것은 파이썬 알고리즘 문제풀이에서
많은 시간초과를 발생시키는 원인이기도 합니다.
(궁금하신 분들을 위해 representation에 관한 reference를 남겨두겠습니다)
이것이 join 연산이 +=에 비해 월등히 빠른 이유입니다.
참고자료: https://www.pythonmorsels.com/string-representations/
String Representations for Classes
All Python objects have two different string representations, although we almost always use just one of them. You can customize both of these string representation on your Python objects.
www.pythonmorsels.com
5. 정리
반복적인 문자열을 처리할 때는
join함수를 이용하되,
미리 리스트를 만들어 두고 처리하자!
이상으로 포스팅을 마치겠습니다.
도움이 되셨다면 댓글과 하단의 하트 한 번씩 부탁드립니다.
감사합니다.
반응형
'Python > 알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스] 로또의 최고 순위와 최저 순위 파이썬 알고리즘 문제풀이 #리스트의 count 함수 사용 (1) | 2022.12.14 |
---|---|
[프로그래머스] 숫자 짝꿍 파이썬 알고리즘 문제풀이 # 반복문 기준 정하기 # sort 함수 안 쓰기 (2) | 2022.12.12 |
[프로그래머스] 기사단원의 무기 파이썬 알고리즘 문제풀이 (약수의 개수 구하기) (0) | 2022.12.08 |
[프로그래머스] 유한소수 판별하기 파이썬 문제 풀이 #유클리드 호제법 #소인수분해 (0) | 2022.11.29 |
[프로그래머스] 햄버거 만들기 파이썬 알고리즘 문제 풀이 (0) | 2022.11.28 |