[BaekJoon] 2671 잠수함 식별

오태호·2022년 6월 19일
0

1.  문제 링크

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

2.  문제


요약

  • 잠수함의 소리가 두 종류의 단위 소리의 연속으로 이루어져 있고, 그 단위 소리를 각각 0과 1로 표시합니다.
  • 한 특정한 소리의 반복은 ~로 표시합니다.
  • (x|y)는 x 또는 y 중에서 아무거나 하나만을 선택해서 만든 소리의 집합을 의미합니다.
  • 우리가 식별하고자 하는 잠수함의 엔진소리의 패턴은 아래와 같습니다.
    • (100~1~|01)~
  • 입력으로 0과 1로 구성된 스트링이 주어질 때, 해당 스트링이 앞에서 나온 잠수함의 엔진소리인지 판별하는 문제입니다.
  • 입력: 첫 번째 줄에 길이가 150개 이하로 제한된 0과 1로 구성된 스트링 1개가 입력됩니다.
  • 출력: 첫 번째 줄에 입력에 들어있는 스트링이 잠수함의 엔진소리를 나타내는 스트링이면 "SUBMARINE"을 출력하고 그렇지 않으면 "NOISE"를 출력합니다.

3.  소스코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
	public String isSubmarine(String input) {
		String pattern = "^(100+1+|01)+$";
		return input.matches(pattern) ? "SUBMARINE" : "NOISE";
	}
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		String input = br.readLine();
		br.close();
		Main m = new Main();
		bw.write(m.isSubmarine(input) + "\n");
		bw.flush();
		bw.close();
	}
}

4.  접근

  • 해당 문제는 정규 표현식을 이용하여 판별할 수 있는 문제입니다.
  • 주어진 패턴을 정규 표현식을 이용하여 표현한 후에 해당 표현식을 이용하여 주어진 문자열이 해당 패턴에 맞는지 확인하면 되는 문제입니다.
  • 주어진 패턴 (100~1~|01)~ 을 정규 표현식으로 나타내면 ^(100+1+|01)+$ 가 됩니다.
    • ^는 정규식의 시작을 의미합니다.
    • +는 앞의 문자가 하나 이상 있는 것을 의미합니다.
    • |는 패턴 안에서 or 연산을 의미합니다.
    • $는 정규식의 끝을 의미합니다.
  1. 입력으로 주어진 스트링을 변수 input에 저장합니다.
  2. (100~1~|01)~을 정규 표현식으로 변경하여 변수 pattern에 저장합니다.
  3. matches()를 이용하여 변수 input에 있는 값이 주어진 패턴과 맞는지 변수 pattern과 비교하여 만약 패턴과 맞다면 SUBMARINE을 출력하고 그렇지 않다면 NOISE를 출력합니다.
profile
자바, 웹 개발을 열심히 공부하고 있습니다!

0개의 댓글