─━ IT ━─

[릿코드, Leetcode] [JAVA] Validate IP Address

DKel 2021. 8. 9. 13:38
반응형

완전 탐색을 지향하는 그리디 알고리즘.

비슷한 문제를 ㅋ모 기업에서 냈던게 기억나서 수소문해서 찾아 풀어보았다.

오랜만에 알고리즘도 재밌넹..

 

class Solution {
    public String validIPAddress(String IP) {
		boolean isNeither = false;
		boolean isIPv4 = false;
		boolean isIPv6 = false;
		String result = "";

		if (IP.lastIndexOf(".") == IP.length() - 1) {
			isNeither = true;
		} else if (IP.contains(".")) {
			isIPv4 = true;
			String[] arr = IP.split("\\.");

			if (arr.length != 4) {
				isNeither = true;
			} else {
				int[] arrInt = new int[arr.length];
				for (int i = 0; i < arr.length; i++) {
					try {
						arrInt[i] = Integer.parseInt(arr[i]);
						if (String.valueOf(arrInt[i]).length() != arr[i].length()) {
							isNeither = true;
							break;
						} else {
							if (arrInt[i] > 255) {
								isNeither = true;
								break;
							}
						}
					} catch (NumberFormatException e) {
						isNeither = true;
						break;
					}
				}
			}
		} else if (IP.contains(":")) {
			String[] arr = IP.split(":");
			if (IP.lastIndexOf(":") == IP.length() - 1) {
				isNeither = true;
			} else if (arr.length != 8) {
				isNeither = true;
			} else {
				isIPv6 = true;
				for (int i = 0; i < arr.length; i++) {
					if (arr[i].length() == 1) {
						if ((arr[i].charAt(0) >= 97 && arr[i].charAt(0) <= 102)
								|| (arr[i].charAt(0) >= 65 && arr[i].charAt(0) <= 70)
								|| Character.isDigit(arr[i].charAt(0))) continue;
						else isNeither = true;
					} else if (arr[i].length() == 0) {
						isNeither = true;
					} else if(arr[i].length() <= 4) {
						for (int j = 0; j < arr[i].length(); j++) {
							if ((!(arr[i].charAt(j) >= 97 && arr[i].charAt(j) <= 102)
									&& !(arr[i].charAt(j) >= 65 && arr[i].charAt(j) <= 70)
									&& !Character.isDigit(arr[i].charAt(j)))
							) {
								isNeither = true;
								break;
							}
						}
					} else {
						isNeither = true;
					}
					if (isNeither) break;
				}
			}
		}

		if (isNeither) {
			result = "Neither";
		} else {
			if (isIPv4) {
				result = "IPv4";
			} else if (isIPv6) {
				result = "IPv6";
			}
		}
		return result;
	}
}
반응형