어흥

[백준 1013] Contact (C++, Java) 본문

알고리즘/백준

[백준 1013] Contact (C++, Java)

라이언납시오 2021. 3. 30. 19:16
728x90
반응형

문제 링크: www.acmicpc.net/problem/1013

 

1013번: Contact

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 전파를 표현하는, { 0, 1 }만으로 이루어진 문자열이 공백 없이 주어진다. 문자열 길이는 (1 ≤

www.acmicpc.net

1. 주의할 점

- Automata 혹은 정규표현식 사용법에 대해 알고 있어야 한다

 

2. 구현

- 위에서 언급한 조건을 정규표현식으로 나타낸다. 단, 이때  (100+1+|01)+가 아닌 [100+1+|01]+로 할 경우, 오답이 발생한다([]의 경우, 1개만 만족해도 True를 반환하기 때문)

- matches() 함수를 사용하여 패턴과 일치하는지 Boolean값으로 Return받고 삼항연산 처리를 수행한다

 

[C++]

#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    int test;
    cin>>test;
    for(int t=0;t<test;t++){
        string str;
        cin>>str;
        if(regex_match(str,regex("(100+1+|01)+"))) cout <<"YES\n";
        else cout << "NO\n";
    }
    return 0;
}

 

[JAVA]

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 test = Integer.parseInt(br.readLine());
	    for(int t=0;t<test;t++){
	        String str = br.readLine().trim();
	        String ptn="(100+1+|01)+";
	        System.out.println(str.matches(ptn)? "YES" : "NO");
	    }
	}
}

 

[참고 문헌]

- www.cplusplus.com/reference/regex/

- www.w3schools.com/java/java_regex.asp

 

728x90
반응형
Comments