백준 9342 - 염색체 (파이썬)
분류 : 문자열 + 정규 표현식
https://www.acmicpc.net/problem/9342
풀이
- 먼저 T를 입력받아 테스트 케이스 개수를 정함
- T만큼 반복하면서 문자열 S를 입력받음
- 기본적으로 문자열 S의 길이가 3미만이면 패턴을 만족할수 없으므로 “Good”을 출력하고 다음 반복으로 넘어감
- 첫문자가 “A”가 아니라면 “A”, “B”, “C”, “D”, “E”, “F”에 속하는지 확인
- 만약 속하지 않는다면 “Good”을 출력하고 다음 반복으로 넘어감
- 만약 속한다면 이를 제거하고 진행한다.
- 마지막 문자를 먼저 확인해 “C”가 아니라면 “A”, “B”, “C”, “D”, “E”, “F”에 속하는지 확인
- 속하지 않는다면 “Good”을 출력하고 다음 반복으로 넘어감
- 만약 속한다면 이를 제거하고 진행한다.
- 여기서 T라는 새로운 문자열을 만들어 연석된 동일한 문자가 나오면 한번만 기록
- for i in range(len(S)) : if i == 0 or S[i] != S[i - 1] : T += S[i]
- 추출된 새로운 문자열이 “AFC”면 “Infected!”를 출력 , 아니면 “Good”을 출력
사실 정규표현식으로 처리가 가능하다.
^[A-F]?A+F+C+[A-F]?$
import re
pattern = re.compile(r'^[A-F]?A+F+C+[A-F]?$')
T = int(input())
for _ in range(T):
S = input().strip()
if pattern.fullmatch(S):
print("Infected!")
else:
print("Good")
코드
# 백준 9342 - 염색체
# 분류 : 문자열
T = int(input())
for _ in range(T):
S = input()
if len(S) < 3 :
print("Good")
continue
if S[0] != "A" :
if S[0] not in ["A", "B", "C", "D", "E", "F"] :
print("Good")
continue
S = S[1:]
if S[-1] != 'C' :
if S[-1] not in ["A", "B", "C", "D", "E", "F"] :
print("Good")
continue
S = S[:-1]
T = ""
for i in range(len(S)) :
if i == 0 or S[i] != S[i - 1] :
T += S[i]
if T == "AFC" :
print("Infected!")
else :
print("Good")
'Programming > 백준' 카테고리의 다른 글
백준 14502 - 연구소 (파이썬) (0) | 2025.02.26 |
---|---|
백준 6064 - 카잉 달력 (파이썬) (1) | 2025.02.25 |
백준 2015 - 수들의 합 4 (파이썬) (0) | 2025.02.24 |
백준 20365 - 블로그2 (파이썬) (0) | 2025.02.24 |
백준 10844 - 쉬운 계단 수 (파이썬) (0) | 2025.02.23 |
댓글
이 글 공유하기
다른 글
-
백준 14502 - 연구소 (파이썬)
백준 14502 - 연구소 (파이썬)
2025.02.26 -
백준 6064 - 카잉 달력 (파이썬)
백준 6064 - 카잉 달력 (파이썬)
2025.02.25 -
백준 2015 - 수들의 합 4 (파이썬)
백준 2015 - 수들의 합 4 (파이썬)
2025.02.24 -
백준 20365 - 블로그2 (파이썬)
백준 20365 - 블로그2 (파이썬)
2025.02.24