[프로그래머스] Lv1 숫자 문자열과 영단어

do yeon kim·2022년 9월 16일
0
회고

다른사람이 문제풀이를 한 것에 달린 댓글에 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"

세번째 인자는 주지 않을 경우 디폴트로서 모든 요소를 바꾼다.

0개의 댓글