https://www.acmicpc.net/problem/2671

 

2671번: 잠수함식별

입력에 들어있는 스트링을 읽고, 이것이 잠수함의 엔진소리를 나타내는 스트링인지 아니면 그냥 물속의 잡음인지를 판정한 후, 잠수함의 엔진 소리에 해당하는 스트링이면 "SUBMARINE"을 출력하고

www.acmicpc.net

코드설명

문자열과 정규표현식을 활용하는 문제입니다.

 

문제를 읽다보면, 

우리가 식별하고자 하는 잠수함의 엔진소리의 패턴은 다음과 같다.

(100~1~|01)~

 

위와 같이 조건이 정확하게 명시되어있습니다.

이떄, 정규표현식을 활용하여 해결할 수 있습니다.

String regex = "^(100+1+|01)+$";
  • ^ : 문자열의 시작을 의미합니다.
  • $ : 문자열의 끝을 의미합니다.
  • (100+1+|01) : 이 부분은 두개의 패턴 중 하나와 일치하는지 확인합니다.
    • 100 + 1 + : 1 다음에 두개 이상의 0 이오고, 그 뒤에 1 이 하나 이상온다는 패턴을 나타냅니다.
      • 즉, "1001", "10001", "10000001" 등과 매칭됩니다.
    • 01 : 단순히 "01" 이라는 두 자리 문자열과 매칭됩니다.
  • + : 이 기호는 바로 앞의 패턴이 하나 이상 연속해서 나타날 수 있음을 나타냅니다.

위의 정규표현식을 만족하는 예시로는

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");
    	}
    }
    
    
}

+ Recent posts