IP 주소 확인

2807 단어 theabbieleetcodedsa
문자열 queryIP가 주어지면 IP가 유효한 IPv4 주소이면 "IPv4"를, IP가 유효한 IPv6 주소이면 "IPv6"를, IP가 어떤 유형의 올바른 IP가 아니면 "Neither"를 반환합니다.

유효한 IPv4 주소는 "x1.x2.x3.x4" 형식의 IP입니다. 여기서 0 <= xi <= 255xi는 선행 0을 포함할 수 없습니다. 예를 들어 "192.168.1.1""192.168.1.0"는 유효한 IPv4 주소이고 "192.168.01.1", "192.168.1.00""[email protected]"는 잘못된 IPv4 주소입니다.

유효한 IPv6 주소는 "x1:x2:x3:x4:x5:x6:x7:x8" 형식의 IP입니다.
  • 1 <= xi.length <= 4
  • xi는 숫자, 영문 소문자('a' ~ 'f' ) 및 영문 대문자( 'A' ~ 'F' )를 포함할 수 있는 16진수 문자열입니다.
  • xi 에서 선행 0이 허용됩니다.

  • 예를 들어 "2001:0db8:85a3:0000:0000:8a2e:0370:7334" 및 "2001:db8:85a3:0:0:8A2E:0370:7334"는 유효한 IPv6 주소이고 "2001:0db8:85a3::8A2E:037j:7334" 및 "02001:0db8:85a3:0000:0000:8a2e:0370:7334"는 잘못된 IPv6 주소입니다.

    예 1:

    입력: queryIP = "172.16.254.1"
    출력: "IPv4"
    설명: 유효한 IPv4 주소입니다. "IPv4"를 반환합니다.

    예 2:

    입력: queryIP = "2001:0db8:85a3:0:0:8A2E:0370:7334"
    출력: "IPv6"
    설명: 유효한 IPv6 주소입니다. "IPv6"을 반환합니다.

    예 3:

    입력: queryIP = "256.256.256.256"
    출력: "둘 다"
    설명: IPv4 주소도 IPv6 주소도 아닙니다.

    제약:
  • queryIP는 영문자, 숫자, 영문자 '.', ':'로만 구성됩니다.

  • 해결책:

    class Solution:
        def validIPAddress(self, queryIP: str) -> str:
            isv4 = True
            isv6 = True
            if "." in queryIP:
                isv6 = False
                queryIP = queryIP.split(".")
                if len(queryIP) != 4:
                    isv4 = False
            else:
                isv4 = False
            if ":" in queryIP:
                isv4 = False
                queryIP = queryIP.split(":")
                if len(queryIP) != 8:
                    isv6 = False
            else:
                isv6 = False
            if isv4:
                for x in queryIP:
                    if not x.isnumeric() or (len(x) > 1 and x[0] == "0") or not 0 <= int(x) < 256:
                        isv4 = False
                        break
            if isv6:
                for x in queryIP:
                    try:
                        int(x, 16)
                        if len(x) > 4:
                            raise
                    except:
                        isv6 = False
                        break
            if isv4:
                return "IPv4"
            if isv6:
                return "IPv6"
            return "Neither"
    

    좋은 웹페이지 즐겨찾기