✏️ 내가 작성한 코드
vowels = ['a','e','i','o','u']
while(True):
password = input()
vowel_num = 0 # 입력받은 문자 모음 개수
str_list = [] # 0: 모음 , 1: 자음
break_point = True
if password == 'end':
break
for idx, chr in enumerate(password):
# 모음 포함 안하면 not
if chr in vowels: # 해당 문자가 모음이면
vowel_num += 1 # 모음개수 추가
str_list.append(0) # 모음
else:
str_list.append(1) # 자음
if idx >= 2:
if str_list[idx] + str_list[idx - 1] + str_list[idx-2] == 3 or str_list[idx] + str_list[idx - 1] + str_list[idx-2] == 0:
break_point = False
print('<{0}> is not acceptable.'.format(password))
break
if idx < len(password)-1 and len(password) != 1:
if chr == password[idx + 1] and chr != 'e' and chr != 'o': # 연속글자 2번
break_point = False
print('<{0}> is not acceptable.'.format(password))
break
if vowel_num == 0 and break_point == True:
print('<{0}> is not acceptable.'.format(password))
elif vowel_num != 0 and break_point == True :
print('<{0}> is acceptable.'.format(password))
✏️ 참고
break_point 변수 :
자음3개, 모음3개, 같은 글자 연속2번 이 3가지 경우는 입력받은 password의 각 문자들을 다 돌아보기전에 테스트가 확인 가능하여 print할 수 있지만 모음 판단은 위 3개 테스트를 다 통과한 후 모음 개수도 확인하여야 하므로 for문밖에 써줬다.
하지만 예를 들어 password가 'tt'라고 입력받았을때,
자음 3개인가(통과) 모음 3개인가(통과), 같은 글자 연속 2번인가(통과 못함) 이렇게 테스트되므로
for문 안에서 '<tt> is not acceptable' 이 출력되고 break통해 for문 밖으로 나온 다음
밑에 if문에서 vowel_num==0에도 해당하므로 또 한번 더 출력하게 되어 에러가 발생할 것이다.(break_point가 없는 경우)
이를 방지하기 위해 break_point 변수를 두어 for문에서 출력되면 break_point 을 False로 두어 밑에 if에 걸리지 않게 해두었다.
'백준' 카테고리의 다른 글
[백준][python] 1924 2007년 문제 (0) | 2023.10.09 |
---|---|
[백준][python] 2869 달팽이는 올라가고 싶다 문제 (0) | 2023.10.09 |
[백준][python] 2164 카드2 문제 (0) | 2023.08.11 |
[백준][python] 1181 단어 정렬 문제 (0) | 2023.08.01 |
[백준][python] 10817 세 수 문제 (0) | 2023.07.25 |