Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 IP 주소 디팡잉(Defanging)하기

유효한 IPv4 IP 주소가 주어졌을 때, 이를 디팡드(Defanged) 버전으로 변환해 반환해야 하는 문제입니다. 디팡드 IP 주소란 문자열에 포함된 모든 마침표 "."를 "[.]"로 치환한 형태를 의미합니다.


예를 들어, 입력된 IP 주소가 "192.168.4.1"이라면 출력 결과는 "192[.]168[.]4[.]1"이 됩니다. 이러한 변환은 보안 분석이나 로그 처리 시 IP 주소가 실제 링크로 잘못 인식되는 것을 방지하기 위해 자주 사용됩니다.

문제 해결 접근 방법

이 문제는 매우 간단한 문자열 처리 기법으로 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.

  • 주어진 IP 주소 문자열을 마침표(".")를 기준으로 분할(split)합니다.
  • 분할된 각 부분을 다시 "[.]" 구분자로 연결(join)하여 새로운 문자열을 만듭니다.

Python의 내장 함수인 split()join()만 활용하면 단 두 줄의 코드로 손쉽게 구현할 수 있습니다.

구현 예제 코드

아래는 위 접근 방식을 그대로 적용한 Python 코드입니다.

class Solution(object):
    def defangIPaddr(self, address):
        address = address.split(".")
        return "[.]".join(address)

ob1 = Solution()
print(ob1.defangIPaddr("192.168.4.1"))

입력 예시

"192.168.4.1"

출력 결과

"192[.]168[.]4[.]1"

코드 동작 원리 살펴보기

위 코드의 실행 과정을 단계별로 정리하면 다음과 같습니다.

  1. 분할 단계: address.split(".")는 문자열을 마침표를 기준으로 나누어 리스트 ["192", "168", "4", "1"]을 생성합니다.
  2. 연결 단계: "[.]".join(address)는 리스트의 요소들을 "[.]"를 사이에 두고 하나의 문자열로 합칩니다.
  3. 결과: 최종적으로 "192[.]168[.]4[.]1"이 반환됩니다.

또한 한 줄로 더 간결하게 작성하고 싶다면 다음과 같이 표현할 수도 있습니다.

def defangIPaddr(address):
    return "[.]".join(address.split("."))

이 방법의 시간 복잡도는 문자열 길이에 비례하여 O(n)이며, 공간 복잡도 역시 결과 문자열 저장을 위해 O(n)입니다. 따라서 어떤 길이의 IPv4 주소라도 효율적으로 처리할 수 있습니다.