https://www.hackerrank.com/challenges/java-regex/problem?isFullScreen=true
IP주소 조건 :
IP 주소는 "A.B.C.D" 형태의 문자열로,
여기서 A, B, C, D의 값은 0에서 255 사이일 수 있습니다.
선두에 오는 0은 허용됩니다.
A, B, C 또는 D의 길이는 3을 초과할 수 없습니다.
정규식 확인할 수 있는 사이트
정규식을 넣어야 하는데.. 모르겠다..
20240118)
어제 한번 봤다고 안보고 입력해봤는데.. 완전히 이해를 하고 있지 않으니 오류가 난다.내일 다시 도전
20240118) 2차 도전
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Scanner;
class Solution{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
String IP = in.next();
System.out.println(IP.matches(new MyRegex().pattern));
}
}
}
//Write your code here
//IP address is a string in the form "A.B.C.D",
//where the value of A, B, C, and D may range from 0 to 255.
//Leading zeros are allowed.
//The length of A, B, C, or D can't be greater than 3.
class MyRegex{
//0~199
//200~249
//250~255
String pattern = "^([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])\\."
+ "([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])\\."
+ "([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])\\."
+ "([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])$";
}
이해하고 작성하니까 통과됨.
처음에 | 양 옆에 보기좋으라고 공백줬었는데 오류남..
조건을 0~199 / 200~249 / 250~255로 준다는 걸 알고 있어서 쓰긴했지만..
이 조건을 스스로 생각해내지는 못할 것 같다...
https://jamesdreaming.tistory.com/199
1.
^
( [0-1]?\\d?\\d|2[0-4]\\d|25[0-5] )[.]
( [0-1]?\\d?\\d|2[0-4]\\d|25[0-5] )[.]
( [0-1]?\\d?\\d|2[0-4]\\d|25[0-5] )[.]
( [0-1]?\\d?\\d|2[0-4]\\d|25[0-5] )
$
^ : 뒤에 오는 문자, 숫자로 정규식을 시작한다.
$ : 종료 시, 행 마지막
[] : 문자열의 해당 위치에 사용될 수 있는 문자
{n} : 앞에 작성된 정규식을 n번 반복하겠다.
() : 그룹
\d : 숫자를 의미
\D : 숫자가 아닌 것을 의미
| : or
//. : 모든 문자 ?
? : 앞에 문자가 있을지 없을지 모름 (ex. ab? : b가 하나일 수도 있고 없을 수도 있음)
2. 쪼개서 이해해보기 : ( [0-1]?\\d?\\d|2[0-4]\\d|25[0-5] ) 이 그룹을 | 을 기준으로 나눔
2-1) [0-1]?\\d?\\d
* 0~199 (000~199)가 올 때 조건
0 | 0 | 0 |
1번 칸 | 2번 칸 | 3번 칸 |
~
1 | 9 | 9 |
1번 칸 | 2번 칸 | 3번 칸 |
1번 칸에 올 수 있는 수 = 0 또는 1 또는 없을 수도 있다. => [0-1]?
2번 칸에 올 수 있는 수 = 0~9까지의 수이고 없을 수도 있다. => [0-9]? (\\d?해도 같은 의미)
3번 칸에 올 수 있는 수 = 0~9까지의 수. => [0-9]
2-2) 2[0-4]\\d
* 200~249 가 올 때 조건
2 | 0 | 0 |
1번 칸 | 2번 칸 | 3번 칸 |
~
2 | 4 | 9 |
1번 칸 | 2번 칸 | 3번 칸 |
1번 칸에 올 수 있는 수 = 2 고정 => 2
2번 칸에 올 수 있는 수 = 0~4까지의 수 => [0-4]
3번 칸에 올 수 있는 수 = 0~9까지의 수. => [0-9]
2-3) 25[0-5]
* 250~255가 올 때 조건
2 | 5 | 0 |
1번 칸 | 2번 칸 | 3번 칸 |
~
2 | 5 | 5 |
1번 칸 | 2번 칸 | 3번 칸 |
1번 칸에 올 수 있는 수 = 2 고정 => 2
2번 칸에 올 수 있는 수 = 5 고정 => 5
3번 칸에 올 수 있는 수 = 0~5까지의 수. => [0-5]
2-4) 앞에서 작성한 조건을 모두 합치면 0~255가 됨. +중간에 [.]넣어야함
^([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])[.]([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])[.]([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])[.]([0-1]?\\d?\\d|2[0-4]\\d|25[0-5])$
'HackerRank > JAVA' 카테고리의 다른 글
Valid Username Regular Expression (0) | 2024.01.19 |
---|---|
[작성중]Java Regex 2 - Duplicate Words (0) | 2024.01.19 |
java String Tokens (0) | 2024.01.17 |
Java Anagrams (0) | 2024.01.17 |
Java String Reverse (0) | 2024.01.17 |