https://www.acmicpc.net/problem/1013
📒 문제
📒 입출력
🐥 조건문 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Contact_1013 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
int check = 0, k = 0;
String str = br.readLine();
for (int j = 0; j < str.length(); j++) {
if(str.charAt(j) == '0')
{
k = 1;
if(j + k > str.length() - 1)
{
sb.append("NO");
break;
}
else if(j + k < str.length() && str.charAt(j+k) == '0')
{
if(check > 1 && j-1 >= 0 && str.charAt(j-1) == '1' )
j = j - 2;
else
{
sb.append("NO");
break;
}
}
else
j += k;
check = 0;
}
else
{
k = 1;
if(j + k >= str.length()-2 || j + k + 1 >= str.length()-1)
{
sb.append("NO");
break;
}
else if(str.charAt(j+k) !='0' || str.charAt(j+k+1) != '0')
{
sb.append("NO");
break;
}
else
{
k = 3;
while(j+k < str.length() - 1 && str.charAt(j+k) == '0')
k++;
if((j + k >= str.length()))
{
sb.append("NO");
break;
}
else if((j+k < str.length() && str.charAt(j+k) != '1'))
{
sb.append("NO");
break;
}
check = 0;
while(j+k < str.length() && str.charAt(j+k) == '1')
{
k++;
check++;
}
j += k-1;
}
}
if(j >= str.length()-1)
{
sb.append("YES");
break;
}
}
if(i < T-1)
sb.append("\n");
}
System.out.println(sb);
}
}
🐣 matches 코드
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.Pattern;
public class Main {
public static void main (String[] args) throws java.lang.Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int i=0;i<T;i++){
String str = br.readLine().trim();
String ptn="(100+1+|01)+";
System.out.println(str.matches(ptn)? "YES" : "NO");
}
}
}
🔍 코드 다시 보기
정규표현식이라는건 알고있지만 이걸 문제에 어떤식으로 사용해야하는지 생각하지 못했다. 그래서 조건식으로만 해결하려해서 코드가 많이 지저분하다. 어떤 분은 matches 함수를 사용해서 코드가 아주 간결했다. 하지만 속도 측면에서는 조금 느렸다. 또 다른 분들은 오토마타를 이용하여 푸셨는데 이부분은 조금 공부를 해야할 것 같다.