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/
문제는 단순히 문자열에서 ".' 을 "[.]" 으로 변환시키는 문제이다. 처음 시도했던 문제가 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 으로 배열을 나누고, 단 한번 인스턴스를 생성하기 때문이라고.
'개발자의 길 > Algorithm' 카테고리의 다른 글
[Algorithm]백준 - 스타트와 링크 (0) | 2018.04.06 |
---|---|
[Algorithm] 해커랭크 - Recursion: Davis' Staircase (0) | 2018.03.28 |
[Algorithm] 해커랭크 - Hash Tables: Ice Cream Parlor (0) | 2018.03.28 |
[Algorithm] 해커랭크 - Time Complexity: Primality (0) | 2018.03.28 |
[Algorithm] 해커랭크 - Sorting: Comparator (0) | 2018.03.26 |