알고리즘 - IP address

업데이트:

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"

풀이

사실 위 문제는 난이도가 어려운 문제는 아니다. 굉장히 쉽게 풀리는 문제이지만 릿코드에서 재미있는점은 바로 성능부분이다. 메모리를 얼마나 사용했는지 처리속도는 얼마나 빠른지 상대적 지표와 절대적 지표가 함께 나와서 이 부분이 구현에 따라 달라지는걸 보는 재미가 있는것같다.

코드 풀이

var defangIPaddr = function(address) {
    return address.split('.').a.join('[.]')
};

자바스크립트에있는 내장 메소드를 사용하여 한줄로 코드를 작성하였다.

  • Runtime: 84 ms
  • Memory Usage: 38.6 MB

개선한 풀이

var defangIPaddr = function(address) {
    let result = '';
    [...address].map(s => {
        if (s === '.') {
            result += '[.]'
        } else {
            result += s
        }
    })
    return result
};
  • Runtime: 64 ms
  • Memory Usage: 38.3 MB

메모리 사용량은 비슷하지만 실행속도에서 차이가 좀 나는걸 확인 할 수 있다. 성능차이에 대한 이유는 처음 사용했던 내장 메소드가 어떻게 동작하는지를 봐야 알 수 있을것같은데 결론은 메소드보다는 간단한건 직접 구현하는쪽이 실행속도면에서는 더 낫다 라고 볼 수 있을것같다.

조금더 가독성 측면에서 개선한다면 내부 조건문을 삼항연산자로 사용할 수 있을것같다.

개선한 풀이

var defangIPaddr = function(address) {
    let result = '';
    [...address].map(s => {
        s === '.' ? result += '[.]' : result += s
    })
    return result
};

댓글남기기