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
'Problem Solving > BOJ' 카테고리의 다른 글
| [백준, BOJ 2115] 갤러리 (java) (0) | 2023.12.29 |
|---|---|
| [백준, BOJ 19641] 중첩 집합 모델 (java) (0) | 2023.12.28 |
| [백준, BOJ 1277] 발전소 설치 (java) (3) | 2023.12.28 |
| [백준, BOJ 3107] IPv6 (java) (1) | 2023.12.26 |
| [백준, BOJ 1939] 중량제한 (java) (1) | 2023.12.24 |