[Python 문제풀이] 13일차

2020. 7. 21. 11:0003. Resources/Python

728x90
반응형

Day_13

Intro

Q21. isIPv4Address

An IP address is a numerical label assigned to each device (e.g., computer, printer) participating in a computer network that uses the Internet Protocol for communication. There are two versions of the Internet protocol, and thus two versions of addresses. One of them is the IPv4 address.

제출 코드

def isIPv4Address(inputString):
    dotidxlist = []

    if len(inputString) >= 15 or len(inputString) < 8:
        return False
    else:
        for i in range(len(inputString)):
            if inputString[i] == ".":
                dotidxlist.append(i)

        if len(dotidxlist) != 3:
            return False
        else:
            for i in range(len(dotidxlist)):
                if i == 0:
                    try:
                        Temp = int(inputString[0:dotidxlist[i]])
                        if Temp < 0 or Temp > 255:
                            return False
                    except:
                        return False

                elif i == len(dotidxlist)-1:
                    try:
                        Temp1 = int(inputString[dotidxlist[i-1]+1:dotidxlist[i]])
                        if Temp1 < 0 or Temp1 > 255:
                            return False
                    except:
                        return False

                    try:
                        Temp2 = int(inputString[dotidxlist[i]+1:])
                        if Temp2 < 0 or Temp2 > 255:
                            return False
                    except:
                        return False
                else:
                    try:
                        Temp = int(inputString[dotidxlist[i-1]+1:dotidxlist[i]])
                        if Temp < 0 or Temp > 255:
                            return False
                    except:
                        return False
            return True

현재 결과
33/35 tests passed.
Sample tests: 18/18
Hidden tests: 15/17
Score: 276/300

  • 2개의 히든케이스를 만족하지 못했음 => 연산시간적인 문제 혹은 다른 문제 때문에 발생했다고 판단됨

해결 방안

  • 파이썬에서 제공하는 string 관련 기본적인 메소드 들을 이용해서 다시 한 번 작성하기
    • string의 경우 내장함수 split 을 이용하면 원하는 키워드를 기준으로 string 문자열을 분리해낼 수 있음

작성 흐름

# Case
# inputString = "172.16.254.1"
inputString = ".254.255.0"

print(len(inputString))

dotidxlist = []
if len(inputString) >= 15:
    print("False")
else:
    for i in range(len(inputString)):
        if inputString[i] == ".":
            dotidxlist.append(i)
            print('idx = %d '%(i))
            print("True")
            print(dotidxlist)
    for i in range(len(dotidxlist)):
        if i == 0:
            try:
                Temp = int(inputString[0:dotidxlist[i]])
                print(Temp)
                if Temp < 0 or Temp > 255:
                    print("False")
            except:
                print("Empty False")
            # print(i)
        elif i == len(dotidxlist)-1:
            try:
                Temp1 = int(inputString[dotidxlist[i-1]+1:dotidxlist[i]])
                print(Temp1)
                if Temp1 < 0 or Temp1 > 255:
                    print("False")
            except:
                print("Empty False")

            try:
                Temp2 = int(inputString[dotidxlist[i]+1:])
                print(Temp2)
                if Temp2 < 0 or Temp2 > 255:
                    print("False")            
            except:
                print("Empty False")
            # print(i)
        else:
            try:
                Temp = int(inputString[dotidxlist[i-1]+1:dotidxlist[i]])
                print(Temp)
                if Temp < 0 or Temp > 255:
                    print("False")            
            except:
                print("Empty False")
            # print(i)
    print("True")
반응형

'03. Resources > Python' 카테고리의 다른 글

[Python 문제풀이] 15일차  (0) 2020.07.23
[Python 문제풀이] 14일차  (0) 2020.07.22
[Python 문제풀이] 12일차  (0) 2020.07.20
[Python 문제풀이] 11일차  (0) 2020.07.19
[Python 문제풀이] 10일차  (0) 2020.07.18