엘리스와 비밀번호
엘리스 아카데미의 프로그램 개발자로 취직한 엘리스는 회원들의 현재 비밀번호가 새롭게 개편된 보안 정책에 얼마나 위반하는지 알아보는 업무를 할당 받았습니다. 엘리스를 도와 아래에 주어진 보안 정책을 따라 몇 번이나 비밀 번호를 수정해야 하는지 출력하는 프로그램을 만들어 주세요.
보안 정책
- 비밀 번호는 8자 이상 30자 이하 의 길이를 가져야 한다.
- 비밀 번호에는 하나 이상의 소문자, 숫자, 특수문자가 포함 되어야 한다.
- 하나의 문자가 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 |