개발자의 길/Algorithm

[Algorithm] LeetCode - defanging-an-ip-address.

토아드 2019. 9. 1. 16:14
반응형

Description

Given a valid (IPv4) IP address, return a defanged version of that IP address.

A defanged IP address replaces every period "." with "[.]".

 

Example 1:

Input: address = "1.1.1.1" Output: "1[.]1[.]1[.]1"

Example 2:

Input: address = "255.100.50.0" Output: "255[.]100[.]50[.]0"

 

Link : https://leetcode.com/problems/defanging-an-ip-address/

 

Defanging an IP Address - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

문제는 단순히 문자열에서 ".' 을 "[.]" 으로 변환시키는 문제이다. 처음 시도했던 문제가 performance 가 떨어져서 어떤 부분이 문제점인지 discuss 에서 다른 사람들의 문제 해결 방법을 알아 보고 정리하여 포스팅한다.

 

1. 새 문자열 삽입하여 만들기

1
2
3
4
5
6
7
8
9
10
class Solution:
    def defangIPaddr(self, address: str-> str:
        defangedIP = ""
        for i in range(len(address)):
            if address[i] != ".":
                defangedIP = defangedIP + address[i]
            else:
                defangedIP = defangedIP + "[.]"
        return defangedIP
            
cs

Runtime: 40 ms, faster than 23.45% of Python3 online submissions for Defanging an IP Address.

Memory Usage: 13.8 MB, less than 100.00% of Python3 online submissions for Defanging an IP Address.

 

 가장 첫 번째로 시도했던 방법으로 새 문자열을 생성하고, 입력으로 주어진 문자를 하나씩 삽입 하는 방법이다. 속도가 하위 23.45% 정도로 꽤나 느린 편에 속해서 discuss 의 최상단 게시물을 참조한 결과, 위와 같은 방식은 string object가 immutable object 이기 때문에 "."이 등장하는 갯수만큼 새로운 string instance 를 만들기 때문에 느리다고 한다.

 

2. join 활용하기

1
2
3
4
class Solution:
    def defangIPaddr(self, address):
        return ('[.]'.join(address.split('.')))
 
cs

 이 방법을 쓰는 것이 가장 pythonic 한 방법이고 (여러 개발자가 관용적으로 자주 사용하는), 성능 면에서도 더 좋다고 한다. 이유는 단 한번 split 으로 배열을 나누고, 단 한번 인스턴스를 생성하기 때문이라고.

반응형