염색체(백준 9342번)
💡 **Check Point !
( 해당사항 ✓체크 )
막힘 없이 수월하게 풀린 문제인가?
1시간이내로 풀렸던 문제인가?✓
1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
시간을 써도 도무지 풀 수 없는 문제인가?
솔루션을 찾아봤는가?
난이도 체감
최상
상
중✓
하
이해도
완벽히 이해✓
다소 헷갈리는 부분들이 있음
이해 못함
문제
상근이는 생명과학 연구소에서 염색체가 특정한 패턴인지를 확인하는 일을 하고 있다. 염색체는 알파벳 대문자 (A, B, C, …, Z)로만 이루어진 문자열이다. 상근이는 각 염색체가 다음과 같은 규칙을 만족하는지 검사해야 한다.
- 문자열은 {A, B, C, D, E, F} 중 0개 또는 1개로 시작해야 한다.
- 그 다음에는 A가 하나 또는 그 이상 있어야 한다.
- 그 다음에는 F가 하나 또는 그 이상 있어야 한다.
- 그 다음에는 C가 하나 또는 그 이상 있어야 한다.
- 그 다음에는 {A, B, C, D, E, F} 중 0개 또는 1개가 있으며, 더 이상의 문자는 없어야 한다.
문자열이 주어졌을 때, 위의 규칙을 만족하는지 구하는 프로그램을 작성하시오.
나의 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sys
T=int(input())
st={'A', 'B', 'C', 'D', 'E', 'F'}
for _ in range(T):
I=sys.stdin.readline().strip()
start=0
if I[0]!='A' and I[0] in st:
start+=1
elif I[0]!='A' and I[0] not in st:
print('Good')
continue
pre_start=start
for condition in ['A','F','C']:
while len(I)>start and I[start]==condition:
start+=1
if start-pre_start==0:
print('Good')
break
pre_start=start
else:
if start==len(I):
print('Infected!')
elif len(I)-start>1 or I[start] not in st:
print('Good')
정규 표현식을 이용한 다른 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sys import stdin
input = stdin.readline
import re
# A/B/C/D/E/F -> F -> C -> A/B/C/D/E/F
def validate(string):
rule = re.compile("^[A-F]?A+F+C+[A-F]?$")
result = rule.match(string)
return result
if __name__ == "__main__":
T = int(input())
for _ in range(T):
string = input()
print("Good" if validate(string) == None else "Infected!")
출처: https://s0n9h2.tistory.com/186
정규표현식 공부를 해놓으면 좋을 것 같다.
- 아래 링크에 잘 정리되어 있음
This post is licensed under CC BY 4.0 by the author.