조건이 너무 많아서 한 번에 조건을 정리하기에 너무 복잡하여 세 가지 조건을 판별해주는 함수를 하나하나 차근차근 작성하면서 접근했다.
①. 모음(a, e, i, o, u) 하나를 반드시 포함하여야 한다.
②. 모음이 3개 혹은 자음이 3개 연속으로 오면 안된다.
③. 같은 글자가 연속적으로 두 번 오면 안되나, ee와 oo는 예외적으로 허용한다.
난이도는 쉬운 편이었는데 조건을 코딩으로 옮기는 과정에서 많은 시간이 걸렸던 문제였다. 당황하지말고 침착하게 작성하는 연습을 더 많이 해야겠다.
# 만약 비밀번호에 문자열이 하나라도 들어있다면 True를 반환 그렇지 않으면 False를 반환함
def check1(password):
lst = ['a', 'e', 'i', 'o', 'u']
for i in password:
if i in lst:
return True
return False
# 만약 모음이나 자음 3개가 연속으로 온다면 False를 반환 그렇지 않으면 True를 반환
def check2(password):
lst = ['a', 'e', 'i', 'o', 'u']
# 비밀번호의 길이가 3미만이면 무조건 True를 반환
if len(password) < 3:
return True
# 비밀번호의 길이가 3이라면 자음이나 모음 3개가 연속적으로 오는지를 확인함
elif len(password) == 3:
check_value1 = ""
for i in range(len(password)):
if password[i] in lst:
check_value1 += "v"
else:
check_value1 += "c"
# 만약 모음 연속 3개(vvv)이거나 자음 연속 3개(ccc)인 경우 False를 반환, 그렇지 않으면 True를 반환함
if check_value1 == "vvv" or check_value1 == "ccc":
return False
else:
return True
# 비밀번호의 길이가 4이상이라면?
else:
check_value2 = ""
for i in range(len(password)):
if password[i] in lst:
check_value2 += "v"
else:
check_value2 += "c"
# 참거짓을 판별하는 값에 vvv나 ccc가 포함되어있다면 False를 반환, 그렇지 않으면 True를 반환
if "vvv" in check_value2 or "ccc" in check_value2:
return False
else:
return True
# 같은 글자가 연속적으로 오면 안되나 'ee'와 'oo'의 경우 True를 반환, 그렇지 않으면 False를 반환
def check3(password):
for i in range(len(password)-1):
if password[i] == password[i+1]:
if password[i] == 'e' or password[i] == 'o':
return True
else:
return False
return True
while True:
password = input()
if password == "end":
break
if check1(password) == True and check2(password) == True and check3(password) == True:
print("<" + str(password) + ">", "is acceptable.")
else:
print("<" + str(password) + ">", "is not acceptable.")