반응형
문제
주어진 문자열이 유효한 IPv4 형식인지 유효한 IPv6 형식인지 확인하는 문제이다.
풀이
주어진 문자열이 특정한 구분자로 나눠지는 확인하고
dot(.) 3개로 구분되어 있으면 IPv4로 간주하고 유효한 지 확인한다.
colon(:) 7개로 구분되어 있으면 IPv6로 간주하고 유효한 지 확인한다.
그 외의 경우는 “Neither” 를 반환한다.
유효한 IPv4 확인하는 방법은 dot(.)으로 나눈 substring 마다 아래의 경우를 확인한다.
- 0-255 사이에 위치한 숫자여야 함
- 0이 아닌 경우를 제외하면 0으로 시작하는 경우가 없어야 함
유효한 IPv6 확인하는 방법은 colon(:)으로 나눈 substring 마다 아래의 경우를 확인한다.
- 길이가 1 이상 4 이하여야함
- hexadecimal에 해당해야 함
코드
class Solution {
public String validIPAddress(String queryIP) {
if (queryIP.chars().filter(c -> c == '.').count() == 3) {
for (String target : queryIP.split("\\\\.",-1)) {
if (target.length() == 0) {
return "Neither";
}
if (target.startsWith("0") && target.length() != 1) {
return "Neither";
}
if (!isNumeric(target) ||
0 > Integer.parseInt(target) || Integer.parseInt(target) > 255) {
return "Neither";
}
}
return "IPv4";
}
if (queryIP.chars().filter(c -> c == ':').count() == 7) {
for(String target : queryIP.split(":",-1)){
if(target.length() == 0 ||target.length() > 4){
return "Neither";
}
for(char ch : target.toCharArray()){
if(Character.digit(ch,16) == -1){
return "Neither";
}
}
}
return "IPv6";
}
return "Neither";
}
public boolean isNumeric(String target) {
if (target == null) {
return false;
}
try {
Integer.parseInt(target);
} catch (NumberFormatException e) {
return false;
}
return true;
}
}
- 공간 복잡도 : O(1)
- : O(n)
참고
반응형