https://www.acmicpc.net/problem/2671
코드설명
문자열과 정규표현식을 활용하는 문제입니다.
문제를 읽다보면,
우리가 식별하고자 하는 잠수함의 엔진소리의 패턴은 다음과 같다.
(100~1~|01)~
위와 같이 조건이 정확하게 명시되어있습니다.
이떄, 정규표현식을 활용하여 해결할 수 있습니다.
String regex = "^(100+1+|01)+$";
- ^ : 문자열의 시작을 의미합니다.
- $ : 문자열의 끝을 의미합니다.
- (100+1+|01) : 이 부분은 두개의 패턴 중 하나와 일치하는지 확인합니다.
- 100 + 1 + : 1 다음에 두개 이상의 0 이오고, 그 뒤에 1 이 하나 이상온다는 패턴을 나타냅니다.
- 즉, "1001", "10001", "10000001" 등과 매칭됩니다.
- 01 : 단순히 "01" 이라는 두 자리 문자열과 매칭됩니다.
- 100 + 1 + : 1 다음에 두개 이상의 0 이오고, 그 뒤에 1 이 하나 이상온다는 패턴을 나타냅니다.
- + : 이 기호는 바로 앞의 패턴이 하나 이상 연속해서 나타날 수 있음을 나타냅니다.
위의 정규표현식을 만족하는 예시로는
1001
10001
100001
01
0101
1001
011001
과 같은 예시가 있습니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.regex.Pattern;
public class Main {
public static int N;
public static String str;
public static int answer = 0;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
str = st.nextToken();
String regex = "^(100+1+|01)+$";
boolean flag = Pattern.matches(regex, str);
if(flag == true) {
System.out.println("SUBMARINE");
}else {
System.out.println("NOISE");
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2933 미네랄 - BFS + 구현 JAVA (0) | 2023.08.26 |
---|---|
[백준] 1655 가운데를 말해요 - 우선순위큐(PriorityQueue) + 아이디어 + 시간초과 JAVA (0) | 2023.08.25 |
[백준] 2670 연속부분최대곱 - DP JAVA (0) | 2023.08.24 |
[백준] 2669 직사각형 네개의 합집합의 면적 구하기 - 구현 JAVA (0) | 2023.08.24 |
[백준] 1759 암호 만들기 - 백트래킹 + Stream JAVA (0) | 2023.08.23 |