백준

[백준_9342번] 염색체

빙수빈수 2022. 1. 11. 16:04

https://www.acmicpc.net/problem/9342

 

9342번: 염색체

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

www.acmicpc.net

[문제]

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