[백준, BOJ 2671] 잠수함식별 (java)
Problem Solving/BOJ

[백준, BOJ 2671] 잠수함식별 (java)

728x90

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

 

2671번: 잠수함식별

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

www.acmicpc.net


메모리: 11,456 KB , 시간: 64 ms

사용 알고리즘: 문자열

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

    /*
    1번 패턴의 시작 100, 끝 1
    2번 패턴 01
     */

    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String input = br.readLine();

        String result = "SUBMARINE";

        int index = 0; // 현재 확인 중인 곳

        while(index < input.length()) {

            // 현재 위치가 1번 패턴의 시작인 경우
            if(index < input.length() - 2
                    && input.substring(index, index + 3).equals("100")) {

                index += 3;

                // 0 반복의 끝을 찾기
                while(index < input.length() && input.charAt(index) == '0')
                    index++;
                // 1번 패턴의 끝을 찾지 못한 경우
                if(index == input.length()) {
                    result = "NOISE";
                    break;
                }

                index++;

                // 1 반복의 끝을 찾기
                while(index < input.length() && input.charAt(index) == '1')
                    index++;

                // 만약 현재 위치가 또 다른 1번 패턴의 위치인 경우
                if(index < input.length() - 2 && input.substring(index - 2, index + 2).equals("1100")) {
                    index--;
                }
            }
            // 현재 위치가 2번 패턴의 시작인 경우
            else if(index < input.length() - 1
                    && input.substring(index, index + 2).equals("01")) {
                index += 2;
            }
            // 현재 위치에선 1, 2번 패턴을 모두 시작할 수 없는 경우
            else {
                result = "NOISE";
                break;
            }
        }

        System.out.println(result);
    }
}
728x90