π [λ°±μ€μκ³ λ¦¬μ¦ νμ΄] Q.2671 μ μν¨ μλ³ λ¬Έμ νμ΄ - java
π λ¬Έμ
https://www.acmicpc.net/problem/2671
μΌλ°μ μΌλ‘ μ μν¨ μμ§μ΄ μλν λμ λμ€λ μ리λ μ μν¨μ μ’ λ₯μ λ°λΌμ λ€λ₯΄λ€κ³ νλ€.
μ°λ¦¬λ λ¬Όμμμ λ€λ¦¬λ μ리μ ν¨ν΄μ λ£κ³ μ κ·Έ μλ¦¬κ° νΉμ ν μ μν¨μμ λμ€λ μ리μΈμ§ μλμ§λ₯Ό μμλ΄λ €κ³ νλ€.
μ΄ λ¬Έμ μμλ μ μν¨μ μλ¦¬κ° λ μ’ λ₯μ λ¨μ μ리μ μ°μμΌλ‘ μ΄λ£¨μ΄μ Έ μκ³ , κ·Έ λ¨μ μ리λ₯Ό κ°κ° 0κ³Ό 1λ‘ νμνλ€.
λ, ν νΉμ ν μ리μ λ°λ³΅μ ~λ‘ νμνλ€. μλ₯Ό λ€μ΄ x~λ xκ° νλ² μ΄μ λ°λ³΅λλ λͺ¨λ μ리μ μ§ν©μ λ§νκ³ ,
(xyz)~λ κ΄νΈ μμ μλ xyzλ‘ ννλ μλ¦¬κ° νλ² μ΄μ λ°λ³΅λλ λͺ¨λ μ리μ μ§ν©μ λ§νλ€. λ€μμ μλ₯Ό 보λΌ.
1~ = {1, 11, 111, 1111, ..., 1...1, ...}
(01)~ = {01, 0101, 010101, 01010101. ...}
(1001)~ = {1001, 10011001, ..., 100110011001...1001, ...}
10~11 = {1011, 10011, 100011, ..., 1000...011, ...}
(10~1)~ = {101, 1001, 10001, 100001, ...1011001, ...100110110001101, ...}
βκ·Έλ¦¬κ³ (x | y)λ xλλ yμ€μμ μ무거λ νλλ§μ μ νν΄μ λ§λ μ리μ μ§ν©, μ¦ μ§ν©{x, y}λ₯Ό μλ―Ένλ€. |
μλ₯Ό λ€λ©΄(1001 | 0101)μ μ§ν©μΌλ‘ {1001, 0101}μ μλ―Ένλ€. λ°λΌμ (0 | 1)~μ 0κ³Ό 1λ‘ μ΄λ£¨μ΄μ§ λͺ¨λ μ€νΈλ§μ μ§ν©, μ¦ λͺ¨λ μ리μ μ§ν©μ λ§νλ€. |
λ ν μλ₯Ό 보면 (100 | 11)~μ 100κ³Ό 11μ λ§μλλ‘ μμ΄μ λ§λ€ μ μλ λͺ¨λ μ리μ μ§ν©μ μλ―Ένλ€. |
μ¦ (100 | 11)~μ ν΄λΉνλ μ€νΈλ§μ μ§ν©μΌλ‘ λνλ΄λ©΄ {100, 11, 10011, 100100100, 1110011, β¦}μ΄ λλ€. |
μ°λ¦¬κ° μλ³νκ³ μ νλ μ μν¨μ μμ§μ리μ ν¨ν΄μ λ€μκ³Ό κ°λ€. (100~1~|01)~
μ¬κΈ°μ μνλ μ리μ μλ₯Ό λ€μ΄λ³΄λ©΄, 1001, 01, 100001, 010101, 1000001110101, 1001110101, 0101010101, 10010110000001111101, 01010101011000111, 10000111001111, β¦μ΄λ€.
λ€μ λ§ν΄μ μ΄κ²μ 100~1~κ³Ό 01μ μμλ‘ μμ΄μ λ§λ€ μ μλ λͺ¨λ μ€νΈλ§μ μ§ν©μ λνλΈλ€.
μ λ ₯μΌλ‘ 0κ³Ό 1λ‘ κ΅¬μ±λ μ€νΈλ§μ΄ μ£Όμ΄μ§ λ, μ΄ μ€νΈλ§μ΄ μμμ κΈ°μ λ μ μν¨μ μμ§μ리μΈμ§ μλμ§λ₯Ό νλ³νλ νλ‘κ·Έλ¨μ μμ±νλΌ.
π μ κ·Όλ²
Q.2671 μ μν¨ μλ³ λ¬Έμ μ λλ€.
λ¬Έμ κ° μλΉν κΈΈκ³ μ΄λ°μ λ° μ‘°κ±΄λ€μ΄ λ§μ보μ΄μ§λ§
λͺ¨λ μλ₯Ό λ€κΈ° μν μ€λͺ μ΄κ³
λ¬Έμ λ₯Ό μ μ½μ΄λ³΄λ©΄ κ²°κ΅ λ¬Έμ μμ ꡬν΄μΌν
κ²½μ°λ (100~1~|01)~ μ λλ€.
λ¬Έμ μμ μ£Όμ΄μ§ μμλ€μ μ΄ν΄λ³΄λ©΄ μ κ·ννμκ³Ό μΌμΉνλ―λ‘
μ κ·ννμμ μ΄μ©ν΄ νμ΄κ° κ°λ₯ν©λλ€.
String regex = "^(100+1+|01)+$"
λ₯Ό μ΄μ©ν΄ ν¨ν΄μ λ§λλ€λ©΄ SUBMARINEμ λ§μ§ μλλ€λ©΄ NOISEλ₯Ό μΆλ ₯ν΄μ£Όλ©΄ λμ λλ€.
π» μ½λ
package problem.string.regex;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Pattern;
public class Main_2671 {
static String str;
public static void main(String[] args) throws IOException {
input();
String answer = solve(str);
System.out.println(answer);
}
public static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
str = br.readLine();
br.close();
}
public static String solve(String input) {
StringBuilder sb = new StringBuilder();
String regex = "^(100+1+|01)+$";
if(Pattern.matches(regex,input) == true){
sb.append("SUBMARINE");
}
else
sb.append("NOISE");
return sb.toString();
}
}