Created
July 14, 2021 14:02
-
-
Save dongwooklee96/3fa9dec9aa3f58d69c667aab5eacb962 to your computer and use it in GitHub Desktop.
2.5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """ | |
| ## 문제 : IPv4와 IPv6를 구분하는 로직을 구현하라. | |
| ## 제한 사항 (IPv4) | |
| 1. 점(.)으로 숫자를 구분한다. | |
| 2. 점(.)으로 구분된 숫자는 4개이다. | |
| 3. 각 숫자의 범위는 0으로 시작하는 숫자는 없다. | |
| 4. 0을 제외하고 0으로 시작하는 숫자는 없다. | |
| - 01, 00, 0234과 같은 숫자는 유효하지 않다. | |
| ## 제한 사항 (IPv6) | |
| 1. 콜론(:)으로 숫자를 구분한다. | |
| 2. 콜론(:)으로 구분된 숫자는 8개이다. | |
| 3. 각 숫자는 16진수 0000에서 FFFF까지 (4자리 16진수이다.) | |
| 4. 각 숫자는 4자리를 채우기 위해 0으로 시작할 수 있다. | |
| 5. 0000의 경우에는 0으로 사용 가능하다. | |
| 6. 콜론(:) 사이의 숫자가 없으면 유효한 IPv6가 아님 | |
| 7. 각 숫자는 4자리를 넝머서 사용할 수 없다. | |
| ## 아이디어 (Brute-Force) | |
| 1. 점(.)과 콜론(:)으로 IPV4의 확인인지 IPV6의 확인인지 구분 | |
| 2. IPv4 확인 | |
| - 점(.)으로 문자열 리스트로 분리 | |
| - 분리된 리스트의 크기가 4인지 확인 | |
| - 각 문자열을 순회 | |
| - 문자열의 길이가 1 ~ 3인지 확인 | |
| - 해당 문자열이 '0'이라면 길이가 1인지 확인 | |
| - 해당 문자열이 숫자이고 255보다 작은지 확인 | |
| 시간 복잡도 | |
| - O(L), L은 입력 문자열의 길이이다. | |
| 공간 복잡도 | |
| - O(1) | |
| 3. IPv6 확인 | |
| - 콜론 (:)으로 문자열 리스트로 분리 | |
| - 분리된 리스트의 크기가 8인지 확인 | |
| - 각 분리된 문자열의 길이가 0보다 크고, 4보다 작은지 검사 | |
| - 문자열의 각 문자가 모두 16진수 숫자 및 문자로 구성되어 있는지 확인 | |
| ## 아이디어 (정규 표현식) | |
| 1. IPV4의 규칙을 따르는 정규 문법 구성 | |
| 2. IPV6의 규칙을 따르는 정규 문법 구성 | |
| 3. 정규 문법 실행 및 규칙 (IPv4, 혹은 IPv6) 반환 | |
| 시간 복잡도 | |
| - O(1) | |
| 공간 복잡도 | |
| - O(1) | |
| - O(1) | |
| """ | |
| import re | |
| def validIpAddress(IP: str) -> str: | |
| IPV4 = '(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])' | |
| ipv4 = \ | |
| re.compile('r^({p}\.){{3}}{p}$'.format(p=IPV4)) | |
| if ipv4.match(IP): | |
| return "IPv4" | |
| IPV6 = '([0-9a-f]{1,4})' | |
| ipv6 = \ | |
| re.compile(r'^({p}\:){{7}}{p}$'.format(p=IPV6), | |
| re.IGNORECASE) | |
| if ipv6.match(IP): | |
| return "IPv6" | |
| return "Neigher" | |
| if __name__ == "__main__": | |
| IP = "256.256.256.256" | |
| print(validIpAddress(IP)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment