[Baekjoon][Java] Contact

HyeBin, Park·2022년 3월 4일
0

Baekjoon

목록 보기
6/11
post-thumbnail

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 함수를 사용해서 코드가 아주 간결했다. 하지만 속도 측면에서는 조금 느렸다. 또 다른 분들은 오토마타를 이용하여 푸셨는데 이부분은 조금 공부를 해야할 것 같다.

0개의 댓글