2022. 1. 24. 18:11ㆍ알고리즘/백준
문제
상근이는 생명과학 연구소에서 염색체가 특정한 패턴인지를 확인하는 일을 하고 있다. 염색체는 알파벳 대문자 (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개의 알파벳 대문자로 이루어진 문자열이 주어진다.
출력
각 테스트 케이스에 대해서, 문제의 규칙을 지키는 문자열인 경우에는 "Infected!"를, 아닌 경우에는 "Good"을 출력한다.
예제 입력 1
15
AFC
AAFC
AAAFFCC
AAFCC
BAFC
QWEDFGHJMNB
DFAFCB
ABCDEFC
DADC
SDFGHJKLQWERTYU
AAAAAAAAAAAAABBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDDDDEEEEEEEEEEEEEEEFFFFFFFFC
AAAFFFFFBBBBCCCAAAFFFF
ABCDEFAAAFFFCCCABCDEF
AFCP
AAFFCPP
예제 출력 1
Infected!
Infected!
Infected!
Infected!
Infected!
Good
Good
Good
Good
Good
Good
Good
Good
Good
Good
문제풀이
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.*;
interface Main{
static void main(String[]a) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = "";
String regex = "^[A-F]?A+F+C+[A-F]?$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher;
int T = Integer.parseInt(br.readLine());
for(int i=0; i<T; i++) {
str = br.readLine();
matcher = pattern.matcher(str);
if(matcher.find()) {
bw.write("Infected!");
} else {
bw.write("Good");
}
bw.newLine();
}
bw.flush();
}
}
정규식으로 풀 수 있습니다.
염색체의 규칙은 처음에 A부터 F까지 중에 1개가 오던가 안 오던가 하므로 ^[A-F]? 을 쓰고
A, F, C가 각각 1개 이상씩 순서대로 와야 하므로 A+F+C+를 씁니다.
마지막으로 처음과 똑같이 A부터 F까지 1개가 오던가 안 오던가 하므로 [A-F]?$을 쓰고 이 정규식에 매칭이 되면 Infected!를 출력하면 됩니다.
출처 : https://www.acmicpc.net/problem/9342
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 3613번 Java vs C++ Java 문제 풀이 (0) | 2022.01.27 |
---|---|
[백준] 6324번 URLs Java 문제 풀이 (0) | 2022.01.24 |
[백준] 19844번 단어 개수 세기 Java 문제 풀이 (0) | 2022.01.24 |
[백준] 1543번 문서 검색 Java 문제 풀이 (0) | 2022.01.20 |
[백준] 15904번 UCPC는 무엇의 약자일까? Java 문제 풀이 (0) | 2022.01.20 |