새소식

⌨️ Algorithms/백준

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

2023. 6. 9. 21:17

  • -

https://www.acmicpc.net/problem/4659

 

4659번: 비밀번호 발음하기

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

www.acmicpc.net

 

  • 회사 FnordCom은 그런 패스워드 생성기를 만들려고 계획 중
  • 당신은 그 회사 품질 관리 부서의 직원으로 생성기를 테스트해보고 생성되는 패스워드의 품질을 평가하여야 함
  • 높은 품질을 가진 비밀번호의 조건은 다음과 같음
      1. 모음(a,e,i,o,u) 하나를 반드시 포함하여야 함
      1. 모음이 3개 혹은 자음이 3개 연속으로 오면 안 됨
      1. 같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용
  • 입력
    • 입력은 여러개의 테스트 케이스로 이루어져 있음
    • 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 테스트할 패스워드가 주어짐
    • 마지막 테스트 케이스는 end이며, 패스워드는 한글자 이상 20글자 이하의 문자열
    • 또한 패스워드는 대문자를 포함하지 않음
  • 출력
    • 각 테스트 케이스를 '예제 출력'의 형태에 기반하여 품질을 평가
  • 시간 제한: 1초
  • 메모리 제한: 128 MB

 

"""
입출력 예시)

a
tv
ptoui
bontres
zoggax
wiinq
eep
houctuh
end
        -> <a> is acceptable.
           <tv> is not acceptable.
           <ptoui> is not acceptable.
           <bontres> is not acceptable.
           <zoggax> is not acceptable.
           <wiinq> is not acceptable.
           <eep> is acceptable.
           <houctuh> is acceptable.
"""

 

## 의사코드 ##

# 1) 모음(a,e,i,o,u) 하나를 반드시 포함

# 2) 모음이 3개 혹은 자음이 3개 연속으로 오면 안 됨

# 3) 같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용

# 조건 2와 조건 3 -> 객체로 따로 저장해서 조건 체크
# rule2, rule3 = 0, 0

 

 

 

 

# 모음 리스트
vowel = ['a','e','i','o','u']

while True:
    rule1, rule2, rule3 = 0, 0, 0
    password = input()
    if password == 'end':
        break
    # 1) 모음(a,e,i,o,u) 하나를 반드시 포함 
    for v in vowel:
        if v in password:
            rule1 += 1
    # 모음이 하나도 들어있지 않으면 부적합
    if rule1 < 1:
        print(f'<{password}> is not acceptable.')
        continue
    # 2) 모음이 3개 혹은 자음이 3개 연속으로 오면 안 됨
    for i in range(len(password)-2):
        # 모음이 3개 연속 오는 경우
        if password[i] in vowel and password[i+1] in vowel and password[i+2] in vowel:
            rule2 += 1
        # 자음이 3개 연속 오는 경우
        elif not(password[i] in vowel) and not(password[i+1] in vowel) and not(password[i+2] in vowel):
            rule2 += 1
    # 연속으로 모음이 3개 혹은 자음이 3개 오는 경우 부적합
    if rule2 == 1:
        print(f'<{password}> is not acceptable.')
        continue
    # 3) 같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용
    for i in range(len(password)-1):
        if password[i] == password[i+1]:
            if password[i] == 'e' or password[i] == 'o':
                continue
            # 'ee', 'oo' 제외 같은 글자가 연속으로 오는 경우  
            else:
                rule3 += 1
    # 'ee', 'oo' 제외 같은 글자가 연속으로 오는 경우 부적합
    if rule3 == 1:
        print(f'<{password}> is not acceptable.')
        continue
    
    # 조건을 다 통과한 경우, 적합한 비밀번호
    print(f'<{password}> is acceptable.')

 

 

 

 

 

 

https://velog.io/@holawan/%EB%B0%B1%EC%A4%80-4659%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8-%EB%B0%9C%EC%9D%8C%ED%95%98%EA%B8%B0-python

 

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

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

velog.io

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!