4659번: 비밀번호 발음하기

좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp

www.acmicpc.net

 

✏️ 내가 작성한 코드

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에 걸리지 않게 해두었다.

+ Recent posts