오늘은 파이썬 알고리즘에 많이 사용되는
문자열 다루는 꿀팁 테크닉을 알려드리려고 합니다.
간단히 다음 장에서 결론부터 말씀드리고 설명 드리겠습니다.
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/
왜 join이 +=보다 빠를까요?
결론부터 말씀드리면, new representation이 매 번 생기지 않기 때문이라고 합니다.
(representation: 객체를 print해보면 나오는 표현식의 일종)
+= 연산은 매 번 new representation을 생성합니다.
그리고 이것은 파이썬 알고리즘 문제풀이에서
많은 시간초과를 발생시키는 원인이기도 합니다.
(궁금하신 분들을 위해 representation에 관한 reference를 남겨두겠습니다)
이것이 join 연산이 +=에 비해 월등히 빠른 이유입니다.
참고자료: https://www.pythonmorsels.com/string-representations/
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 |