[백준] 4659번 비밀번호 발음하기

거북이·2023년 1월 7일
0

백준[실버5]

목록 보기
73/114
post-thumbnail

💡문제접근

조건이 너무 많아서 한 번에 조건을 정리하기에 너무 복잡하여 세 가지 조건을 판별해주는 함수를 하나하나 차근차근 작성하면서 접근했다.

①. 모음(a, e, i, o, u) 하나를 반드시 포함하여야 한다.
②. 모음이 3개 혹은 자음이 3개 연속으로 오면 안된다.
③. 같은 글자가 연속적으로 두 번 오면 안되나, ee와 oo는 예외적으로 허용한다.

난이도는 쉬운 편이었는데 조건을 코딩으로 옮기는 과정에서 많은 시간이 걸렸던 문제였다. 당황하지말고 침착하게 작성하는 연습을 더 많이 해야겠다.

💡코드(메모리 : 30616KB, 시간 : 36ms)

# 만약 비밀번호에 문자열이 하나라도 들어있다면 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.")

💡소요시간 : 30m

0개의 댓글