반응형
완전 탐색을 지향하는 그리디 알고리즘.
비슷한 문제를 ㅋ모 기업에서 냈던게 기억나서 수소문해서 찾아 풀어보았다.
오랜만에 알고리즘도 재밌넹..
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;
}
}
반응형