본문 바로가기

알고리즘/백준 문제 풀이

[Python] 9342번 염색체

728x90

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

 

9342번: 염색체

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

www.acmicpc.net


 

22/09/13

 

 

정규 표현식을 사용하여 쉽게 풀은 문제로, 개인적으로 정규 표현식 자체가 어려운 내용이어서 골드 5부터 시작하는데, 이게 왜 실버 3에 위치해 있는지 의문인 문제였다.


 

문제 접근 방식:

 

 

정규 표현식을 사용하여 풀었다. 만약 정규 표현식에 대하여 잘 모른다면, 박응용 저자님의 점프 투 파이썬을 참고하면 도움이 많이 될 것이다.

 

  • 문자열은 {A, B, C, D, E, F} 중 0개 또는 1개로 시작해야 한다.
  • 그 다음에는 A가 하나 또는 그 이상 있어야 한다.
  • 그다음에는 F가 하나 또는 그 이상 있어야 한다.
  • 그다음에는 C가 하나 또는 그 이상 있어야 한다.
  • 그다음에는 {A, B, C, D, E, F} 중 0개 또는 1개가 있으며, 더 이상의 문자는 없어야 한다.

조건이 다음과 같으므로, 이 조건에 맞는 정규 표현식을 세웠다.

 

그러면 '[A-F]?A+F+C+[A-F]?'이 패턴이 되는데, 이를 이용하여 fullmatch메서드를 진행시켜주면 끝이다.


아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.

더보기
# 9342번 염색체
# 정규표현식
import re
p = re.compile('[A-F]?A+F+C+[A-F]?')
N = int(input())
for _ in range(N):
    k = input()
    if p.fullmatch(k):
        print('Infected!')
    else:
        print('Good')