회고
다른사람이 문제풀이를 한 것에 달린 댓글에 replace를 사용할 시 시간복잡도가 최악의 경우 O(n^2) 까지 가능하다고 한다.
문제에 대한 접근은 좋았으나, 성능면에서 잘못 구현된 코드일 수 있다.
파이썬에서 주어지는 메서드를 이용하는 것은 좋으나, 메서드가 제공하는 기능만을 생각하고 사용하는 것이 아닌, 메서드가 동작하는 방식에 대해서 생각해 볼 필요가 있다.
문제풀이
https://school.programmers.co.kr/learn/courses/30/lessons/81301
def solution(s):
word = {
0:"zero",
1:"one",
2:"two",
3:"three",
4:"four",
5:"five",
6:"six",
7:"seven",
8:"eight",
9:"nine"
}
for i in word.items():
s = s.replace(i[1], str(i[0]))
return int(s)
# 다른사람 풀이
def solution(s):
answer = ""
number = {"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4", "five": "5", "six": "6", "seven": "7", "eight": "8", "nine": "9"}
num = ""
for c in s:
if c.isdigit():
answer += c
else:
num += c
if num in number.keys():
answer += number[num]
num = ""
return int(answer)
isdigit() and replace()
isdigit()
은 문자열에 있는 요소가 숫자인지 아닌지 확인 하는 메서드이다.
test = "1"
test.isdigit() # True
replace()
는 첫번째로 변경할 문자, 두번째는 변경되어질 문자, 세번째는 변경되어질 갯수를 인자로 받는다.
test = "hello"
replace(l, q, 1) -> "heqlo"
replace(l, q, 2) -> "heqqo"
세번째 인자는 주지 않을 경우 디폴트로서 모든 요소를 바꾼다.