티스토리 뷰

반응형
백준 비밀번호 발음하기 (4659번) 파이썬 풀이

백준 비밀번호 발음하기 4659 파이썬


문제


좋은 비밀번호를 판단하는 규칙은 다음과 같습니다.

  1. 반드시 모음을 하나 이상 포함해야 합니다. (모음은 a, e, i, o, u)
  2. 모음이 3개 연속, 또는 자음이 3개 연속 오면 안 됩니다.
  3. 같은 문자가 연속으로 두 번 나오면 안 됩니다. 단, `ee`와 `oo`는 허용합니다.

입력은 여러 개의 테스트 케이스이며, 마지막 입력은 `"end"`로 종료됩니다.

출력은 `<비밀번호> is acceptable.` 혹은 `<비밀번호> is not acceptable.` 형식으로 출력해야 합니다.



테스트케이스


입력:

a
tv
ptoui
bontres
zoggax
wiinq
eep
houctuh
end

출력:

 is acceptable.
 is not acceptable.
 is not acceptable.
 is not acceptable.
 is not acceptable.
 is not acceptable.
 is acceptable.
 is acceptable.


작동원리


  1. 모음 검사
    문자열 안에 모음이 하나라도 있는지 확인합니다. 없으면 무조건 불가입니다.
  2. 연속 검사
    문자를 하나씩 보면서 모음/자음 카운트를 합니다.
    • 모음을 만나면 모음 카운트를 증가시키고, 자음 카운트는 0으로 초기화합니다.
    • 자음을 만나면 자음 카운트를 증가시키고, 모음 카운트는 0으로 초기화합니다.
    • 모음 카운트나 자음 카운트가 3 이상이면 불가입니다.
  3. 연속된 같은 문자 검사
    이전 문자와 현재 문자가 같으면 불가입니다. 단, 예외로 `ee`, `oo`는 허용합니다.
  4. 출력 형식
    문제의 예제 출력처럼 반드시 `<비밀번호> is acceptable.` 또는 `<비밀번호> is not acceptable.`의 형식을 지켜야 하며, 마지막에 점(`.`)이 있어야 합니다.


아이디어


  • `Check()` 함수를 만들어 모음인지 판별합니다.
  • 반복문에서 각 문자를 보며 조건을 검사합니다.
  • 세 조건을 모두 만족하면 `"acceptable."`, 아니면 `"not acceptable."`을 출력합니다.


전체코드


def Check(arr):
    if arr=='a':
        return True
    if arr=='e':
        return True
    if arr=='i':
        return True
    if arr=='o':
        return True
    if arr=='u':
        return True

    return False


while(True):
    arr=input()
    cnt_mo=0
    cnt_ja=0
    check_mo=False
    check_ot=True

    if arr=='end':
        break

    for i in range(len(arr)):
        if Check(arr[i]):
            cnt_mo+=1
            cnt_ja=0
            check_mo=True
        else:
            cnt_mo=0
            cnt_ja+=1

        if(cnt_mo>=3 or cnt_ja>=3):
            check_ot=False
            break
        if(i>0 and arr[i]==arr[i-1] and arr[i]!='e' and arr[i]!='o'):
            check_ot=False
            break
    if(check_mo and check_ot):
        print(f'<{arr}> is acceptable.')
    else:
        print(f'<{arr}> is not acceptable.')


결론


이 문제는 비밀번호가 “발음할 수 있는 형태인지” 판별하는 문제입니다. 즉, 사람이 쉽게 읽고 기억할 수 있는 비밀번호 규칙을 프로그램으로 검사하는 것이 핵심입니다.

  • 반드시 모음을 포함해야 하므로, 완전히 자음으로만 이루어진 문자열은 허용되지 않습니다.
  • 발음하기 어려운 긴 모음이나 긴 자음의 연속(3개 이상)은 허용되지 않습니다.
  • 같은 글자가 두 번 연속되면 발음이 불편해지지만, 실제 발음에서 자연스러운 `"ee"`, `"oo"`는 허용됩니다.

따라서 이 문제는 단순한 문자열 검사가 아니라, 사람의 언어적 직관을 흉내 내는 규칙을 프로그램으로 구현하는 문제입니다. 입력된 문자열이 이 규칙을 모두 만족하면 `<비밀번호> is acceptable.`을 출력하고, 그렇지 않으면 `<비밀번호> is not acceptable.`을 출력하는 것이 최종 목표입니다.

즉, 비밀번호를 안전하면서도 사람이 발음 가능하도록 만들려는 규칙을 프로그래밍으로 구현하는 연습 문제라는 것이 결론입니다.


반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함
반응형