[백준] 1543번 염색체 Java 문제 풀이

2022. 1. 24. 18:11알고리즘/백준

728x90
반응형

문제

상근이는 생명과학 연구소에서 염색체가 특정한 패턴인지를 확인하는 일을 하고 있다. 염색체는 알파벳 대문자 (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

 

9342번: 염색체

상근이는 생명과학 연구소에서 염색체가 특정한 패턴인지를 확인하는 일을 하고 있다. 염색체는 알파벳 대문자 (A, B, C, ..., Z)로만 이루어진 문자열이다. 상근이는 각 염색체가 다음과 같은 규칙

www.acmicpc.net

 

728x90
반응형