[Java] 백준 1013번 [Contact] 자바
백준 1013번
https://www.acmicpc.net/problem/1013
문제
전파의 기본 단위는 { 0 , 1 } 두 가지로 구성되어있으며, x+ ( ) 는 임의의 개수(최소 1개) x의 반복으로 이루어진 전파의 집합을 나타낸다.
-
(100 | 11)+ = { 100 , 11 , 10011 , 11100 , 1110011100 , 100111111100100, … }
-
(100+1+ | 01)+
김동혁 박사는 다양한 전파 기록 중에서 위의 패턴을 지니는 전파를 가려내는 프로그램을 필요로 한다. 이를 수행할 수 있는 프로그램을 작성하라.
입력
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 전파를 표현하는, { 0, 1 }만으로 이루어진 문자열이 공백 없이 주어진다. 문자열 길이는 (1 ≤ N ≤ 200)의 범위를 갖는다.
출력
각 테스트 케이스에 대해 주어진 전파가 문제에서 제시한 패턴이면 “YES”를 그렇지 않은 경우는 “NO”를 출력한다. 출력 문자열은 모두 대문자로 구성되어 있다.
예제 입력 1
3
10010111
011000100110001
0110001011001
예제 출력 1
NO
NO
YES
생각하기
3
10010111
011000100110001
0110001011001
NO
NO
YES
생각하기
이 문제는 정규표현식의 개념을 다루는 문제이다.
난 정규표현식에 대해서 잘 몰라서 쓸때마다 검색하면서 풀었는데,
이문제가 얼마나 쉽나 함은..
그냥 문제에서 제시한 "(100+1+ | 01)+"
패턴을 그대로 넣기만 하면 정답이 출력된다.
골드 문제여서 엄청 어려울 줄 알았는데, 정규표현식 자체가 좀 까다롭다는 점 때문에 티어가 높은게 아닐까 싶다.
동작
정규표현식으로 만든 패턴과 문자열을 비교하기 위해서는 regex.Pattern을 사용해야 합니다.
Pattern P = Pattern.compile("(100+1+|01)+");
릍 통해
미리 우리가 사용할 pattern을 상수로 compile 한 뒤
matcher의 matches함수를 활용해 비교해서 boolean값으로 판별합니다.
TMI
1. 안타깝지만 아레시보 천문대는 2020년에 붕괴되어서 은퇴를 하게 되었다.
2. 영화 콘택트에서 주인공이 외계신호를 연구하다 쫓겨난 곳이 아레시보 전파만원경이었다. 그래서 이 문제의 제목이 contact이다. (첫 줄은 명대사)
코드
import java.util.regex.Pattern;
import java.io.*;
public class Main {
private static final Pattern P = Pattern.compile("(100+1+|01)+");
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
while(T-- > 0) {
if (P.matcher(br.readLine()).matches()) {
sb.append("YES").append('\n');
} else {
sb.append("NO").append('\n');
}
}
System.out.println(sb);
} // End of main
} // End of class
Author And Source
이 문제에 관하여([Java] 백준 1013번 [Contact] 자바), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@lifeisbeautiful/Java-백준-1013번-Contact-자바
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import java.util.regex.Pattern;
import java.io.*;
public class Main {
private static final Pattern P = Pattern.compile("(100+1+|01)+");
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
while(T-- > 0) {
if (P.matcher(br.readLine()).matches()) {
sb.append("YES").append('\n');
} else {
sb.append("NO").append('\n');
}
}
System.out.println(sb);
} // End of main
} // End of class
Author And Source
이 문제에 관하여([Java] 백준 1013번 [Contact] 자바), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lifeisbeautiful/Java-백준-1013번-Contact-자바저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)