당신은 그 회사 품질 관리 부서의 직원으로 생성기를 테스트해보고 생성되는 패스워드의 품질을 평가하여야 함
높은 품질을 가진 비밀번호의 조건은 다음과 같음
모음(a,e,i,o,u) 하나를 반드시 포함하여야 함
모음이 3개 혹은 자음이 3개 연속으로 오면 안 됨
같은 글자가 연속적으로 두번 오면 안되나,ee 와 oo는 허용
입력
입력은 여러개의 테스트 케이스로 이루어져 있음
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 테스트할 패스워드가 주어짐
마지막 테스트 케이스는 end이며, 패스워드는 한글자 이상 20글자 이하의 문자열
또한 패스워드는 대문자를 포함하지 않음
출력
각 테스트 케이스를 '예제 출력'의 형태에 기반하여 품질을 평가
시간 제한: 1초
메모리 제한: 128 MB
"""
입출력 예시)
a
tv
ptoui
bontres
zoggax
wiinq
eep
houctuh
end
-> <a> is acceptable.
<tv> is not acceptable.
<ptoui> is not acceptable.
<bontres> is not acceptable.
<zoggax> is not acceptable.
<wiinq> is not acceptable.
<eep> is acceptable.
<houctuh> is acceptable.
"""
## 의사코드 ##
# 1) 모음(a,e,i,o,u) 하나를 반드시 포함
# 2) 모음이 3개 혹은 자음이 3개 연속으로 오면 안 됨
# 3) 같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용
# 조건 2와 조건 3 -> 객체로 따로 저장해서 조건 체크
# rule2, rule3 = 0, 0
통과한 코드
# 모음 리스트
vowel = ['a','e','i','o','u']
while True:
rule1, rule2, rule3 = 0, 0, 0
password = input()
if password == 'end':
break
# 1) 모음(a,e,i,o,u) 하나를 반드시 포함
for v in vowel:
if v in password:
rule1 += 1
# 모음이 하나도 들어있지 않으면 부적합
if rule1 < 1:
print(f'<{password}> is not acceptable.')
continue
# 2) 모음이 3개 혹은 자음이 3개 연속으로 오면 안 됨
for i in range(len(password)-2):
# 모음이 3개 연속 오는 경우
if password[i] in vowel and password[i+1] in vowel and password[i+2] in vowel:
rule2 += 1
# 자음이 3개 연속 오는 경우
elif not(password[i] in vowel) and not(password[i+1] in vowel) and not(password[i+2] in vowel):
rule2 += 1
# 연속으로 모음이 3개 혹은 자음이 3개 오는 경우 부적합
if rule2 == 1:
print(f'<{password}> is not acceptable.')
continue
# 3) 같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용
for i in range(len(password)-1):
if password[i] == password[i+1]:
if password[i] == 'e' or password[i] == 'o':
continue
# 'ee', 'oo' 제외 같은 글자가 연속으로 오는 경우
else:
rule3 += 1
# 'ee', 'oo' 제외 같은 글자가 연속으로 오는 경우 부적합
if rule3 == 1:
print(f'<{password}> is not acceptable.')
continue
# 조건을 다 통과한 경우, 적합한 비밀번호
print(f'<{password}> is acceptable.')