negno
개발Log
negno
전체 방문자
오늘
어제
  • 분류 전체보기
    • Project
      • Mini_Project
      • PTSD_Project
    • Algorithm
      • Elice
      • JavaFestival
    • BACK-END
      • C Programming
      • JAVA
      • JSP Servlet
      • Python
      • Spring
      • Machine Learning
    • FRONT-END
      • HTML CSS
      • JavaScript
    • Application
      • Android
    • DataBase
      • Oracle
      • MySql
    • IoT
      • Arduino
      • Raspberry pi

티스토리

hELLO · Designed By 정상우.
negno

개발Log

(Elice / 문자열처리 / Python) 엘리스와 비밀번호
Algorithm/Elice

(Elice / 문자열처리 / Python) 엘리스와 비밀번호

2022. 10. 13. 14:05

엘리스와 비밀번호

엘리스 아카데미의 프로그램 개발자로 취직한 엘리스는 회원들의 현재 비밀번호가 새롭게 개편된 보안 정책에 얼마나 위반하는지 알아보는 업무를 할당 받았습니다. 엘리스를 도와 아래에 주어진 보안 정책을 따라 몇 번이나 비밀 번호를 수정해야 하는지 출력하는 프로그램을 만들어 주세요.

보안 정책

  1. 비밀 번호는 8자 이상 30자 이하 의 길이를 가져야 한다.
  2. 비밀 번호에는 하나 이상의 소문자, 숫자, 특수문자가 포함 되어야 한다.
  3. 하나의 문자가 3번 이상 연속 되면 안된다. 예를 들어 aaabb11!는 사용 불가능한 비밀 번호지만 aabab11!는 사용 가능하다.

입력 예시 1

aBcD2fg!

출력 예시 1

0

입력 예시 2

AA

출력 예시 2

6
 

입력

  • 비밀 번호가 문자열 형태로 제공됩니다. 이 문자열의 길이는 1이상 100이하 입니다.

출력

  • 주어진 비밀 번호가 새로운 보안 정책에 따라 변경되려면 몇 번의 수정이 필요한 지 출력해주세요.
  • 수정에 있어, 한 문자의 삽입, 변경, 삭제는 모두 하나의 수정으로 간주됩니다.

소스 코드

def classifier(c):
    if c.islower(): return 0
    elif c.isalnum() == False: return 1
    elif c.isdigit(): return 2
    else: return 3

s = input()

length = len(s)
repeat = []
types = [False]*4
i, j  = 0, 1

while i < length:
    while (i+j < length and s[i+j] == s[i]): 
        j += 1
    if j >= 3: 
        repeat += [j] 
    types[classifier(s[i])] = True         
    i, j = i+j, 1

insert, delete, replace = 0, 0, 0

if length < 8: 
    insert = 8-length

elif length > 30:   
    delete = length-30
    allbydel = sum([(r-2) for r in repeat])
    if delete < allbydel:     
        replace = max(sum([r//3 for r in repeat]) - delete, ((allbydel-delete) + 2) // 3)

else:               
    for rp in repeat: 
        replace += rp // 3

print(insert+delete+max(replace, types[:-1].count(False)-insert))

'Algorithm > Elice' 카테고리의 다른 글

(Elice / 시뮬레이션 /Python) 엘팡맨 생존기  (0) 2022.10.14
(Elice / 구현 / Python) 생수  (0) 2022.10.14
(Elice / 브루트포스 / C++) 조교님, 점수 올려주세요  (0) 2022.10.13
(Elice / 수학 / Python) 숫자 나라 특허 전쟁  (0) 2022.10.13
(Elice / 수학 / Python) 덧셈을 모르는 체셔  (0) 2022.10.13
    negno
    negno

    티스토리툴바