https://school.programmers.co.kr/learn/courses/30/lessons/81301
python의 str.replace() 메서드를 사용하면 코드는 훨씬 깔끔해질 수 있기는 하다.
def solution2(s):
num_dic = {"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4", "five": "5", "six": "6", "seven": "7",
"eight": "8", "nine": "9"}
answer = s
for key, value in num_dic.items():
answer = answer.replace(key, value)
return int(answer)
str.replace() 메서드는 원본 문자열을 순회하며 지정된 부분 문자열을 찾고 다른 문자열로 대체한다. 즉,원본 문자열이 길어질수록, 부분 문자열의 대체 작업이 많이 필요할수록 시간 복잡도가 증가한다.
아래의 solution 메서드와 위의 solution2 메서드를 비교했다. 문자열의 길이가 길어질수록 solution2 메서드의 시간이 월등하게 증가하는 걸 볼 수 있다.
# solution 메서드 시간 체크
start_time = time.time()
solution("one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10")
print(time.time() - start_time)
# solution2 메서드 시간 체크
start_time = time.time()
solution2("one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10one4seveneightone4seveneight23four5six71zerotwozero3123twotwothree10")
print(time.time() - start_time)
0.0005748271942138672
4.410743713378906e-05
python
def convert_string_to_number(s: str) -> tuple:
numbers = {
"zero": "0",
"one": "1",
"two": "2",
"three": "3",
"four": '4',
"five": "5",
"six": "6",
"seven": "7",
"eight": "8",
"nine": "9",
}
for i in range(3, len(s) + 1):
if s[:i] in numbers.keys():
return numbers[s[:i]], i
def solution(s: str) -> int:
start = 0
number_list = []
for i in range(len(s)):
if i < start:
continue
# 숫자인지 확인
if s[i].isdigit():
number_list.append(s[i])
else:
result = convert_string_to_number(s[i : i + 5])
number_list.append(result[0])
start = i + result[1]
return int("".join(number_list))