문제
- 다음과 같은 규칙을 만족하는 비밀번호는 높음 품질을 가진다고 평가한다.
1) 모음 하나를 반드시 포함한다.
2) 모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다.
3) 같은 글자가 연속적으로 오면 안되나, ee와 oo는 허용한다.
- 20글자 이하의 문자열이 주어질 때 품질 평가하기
풀이
- 1) 모음 하나를 반드시 포함
모음 집합과의 합집합 연산으로 현재 단어에 모음이 있는지 확인한다.
- 2) 단어의 연속 확인
이전 단어의 타입(모음/자음), 알파벳, 타입의 연속 개수를 포함하는 prev 변수를 통해 확인하도록 한다.
# 출력 함수
def result(res, word) :
if res :
print(f"<{word}> is acceptable.")
else :
print(f"<{word}> is not acceptable.")
# 모음 집합
consonants = set({'a', 'e', 'i', 'o', 'u'})
while True :
word = input()
if word == "end" : # 마지막 단어
break
# 1) 모음 하나를 반드시 포함한다.
if not set(word) & consonants :
result(False, word)
continue
# 품질 확인
res = True
prev = {"type": '-', "alpha": '-', "cnt": 0}
for w in word :
t = "con" if w in consonants else "vow"
# 2) 모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다.
if prev["type"] == t :
prev["cnt"] += 1
if prev["cnt"] == 3 :
res = False
break
else :
prev["type"] = t
prev["cnt"] = 1
# 3) 같은 글자가 연속적으로 오면 안되나, ee와 oo는 허용한다.
if prev["alpha"] == w and (w not in {'e', 'o'}) :
res = False
break
prev["alpha"] = w
result(res, word)
References