https://www.acmicpc.net/problem/9342
[문제]
상근이는 생명과학 연구소에서 염색체가 특정한 패턴인지를 확인하는 일을 하고 있다. 염색체는 알파벳 대문자 (A, B, C, ..., Z)로만 이루어진 문자열이다. 상근이는 각 염색체가 다음과 같은 규칙을 만족하는지 검사해야 한다.
- 문자열은 {A, B, C, D, E, F} 중 0개 또는 1개로 시작해야 한다.
- 그 다음에는 A가 하나 또는 그 이상 있어야 한다.
- 그 다음에는 F가 하나 또는 그 이상 있어야 한다.
- 그 다음에는 C가 하나 또는 그 이상 있어야 한다.
- 그 다음에는 {A, B, C, D, E, F} 중 0개 또는 1개가 있으며, 더 이상의 문자는 없어야 한다.
문자열이 주어졌을 때, 위의 규칙을 만족하는지 구하는 프로그램을 작성하시오.
[입력 조건]
첫째 줄에 테스트 케이스의 개수 T ≤ 20 이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 최대 200개의 알파벳 대문자로 이루어진 문자열이 주어진다.
[코드]
import java.util.*;
public class BaekJoon_9342 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
/*
* [A-F]? : A~F 중 문자가 있거나 없다
* A+ : A가 1문자이상 있다.
* $ : 문자열이 끝난다.
*/
String str="[A-F]?A+F+C+[A-F]?$";
for(int i=0;i<t;i++) {
String word=sc.next();
if(word.matches(str))
System.out.println("Infected!");
else
System.out.println("Good");
}
}
}
[고찰]
이번 문제는 코딩 스터디 13주차 주제인 정규표현식을 사용하는 문제였다. 정규표현식은 처음 접해보는거라 우선 검색을 통해 어떻게 표현하는지 부터 찾아봐야 했다. 코딩 테스트에 자주 출제되지는 않지만 알아두면 좋은 문법인것 같다.
<정규표현식 문법>
정규표현식 | 설명 |
. | 어떤 문자 1개를 의미 |
^regex | ^ 다음 regex로 line을 시작하는지 |
regex$ | $ 앞의 regex가 line의 마지막으로 끝나는지 |
[abc] | a, b, c 중의 문자 1개 |
[abc][vz] | a, b, c 중에 문자 1개와 v, z 중에 문자 1개의 조합 |
[^abc] | a, b, c를 제외한 문자 1개 |
[a-d1-7] | a~d, 1~7 사이의 문자 1개 |
\d | 0~9 사이의 숫자, [0-9]와 동일 |
\D | 숫자가 아닌 어떤 문자, [^0-9]와 동일 |
\b | 단어의 경계(공백)를 찾음 |
'백준' 카테고리의 다른 글
[백준_19238번] 스타트 택시 (0) | 2022.01.14 |
---|---|
[백준_1939번] 중량제한 (0) | 2022.01.14 |
[백준_1253번] 좋다 (0) | 2022.01.11 |
[백준_1976번] 여행가자 (0) | 2022.01.11 |
[백준_1520번] 내리막 길 (0) | 2022.01.10 |