암호를 나타내는 문자열 s가 있다고 가정하고 암호 기준을 확인해야 합니다. 따라야 할 몇 가지 규칙이 있습니다. −
- 비밀번호 길이는 최소 8자, 최대 20자입니다.
- 비밀번호에 하나 이상의 숫자가 포함되어 있습니다.
- 비밀번호에는 하나 이상의 소문자와 하나의 대문자가 포함되어 있습니다.
- 비밀번호에 !"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ 와 같은 특수 문자가 하나 이상 포함되어 있습니다.
- 비밀번호에는 탭이나 새 줄과 같은 다른 문자가 포함되지 않습니다.
따라서 입력이 "@bCd12#4"와 같으면 출력이 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- a:=0, b:=0, c:=0, d:=0
- 비밀번호 크기 <8 또는 비밀번호 크기> 20인 경우
- 거짓을 반환
- 암호의 각 문자 i에 대해 다음을 수행합니다.
- i가 대문자이면
- a :=a + 1
- 그렇지 않으면 i가 소문자이면
- b :=b + 1
- 그렇지 않으면 이러한 특수 문자 집합에서 i가 '"!"#^modAND\'() *+,- ./:;<=>?@[\\]XOR_`{OR}~"'인 경우
- c :=c + 1
- 그렇지 않으면 i가 숫자일 때
- d :=d + 1
- i가 대문자이면
- a>=1이고 b>=1이고 c>=1이고 d>=1이고 a+b+c+d가 암호의 크기와 같으면
- 참 반환
- 그렇지 않으면
- 거짓을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution:
def solve(self, password):
a=0
b=0
c=0
d=0
if len(password)<8 or len(password)>20:
return False
for i in password:
if i.isupper():
a+=1
elif i.islower():
b+=1
elif i in '"!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~"':
c+=1
elif i.isdigit():
d+=1
if a>=1 and b>=1 and c>=1 and d>=1 and
a+b+c+d==len(password):
return True
else:
return False
s = "@bCd12#4"
ob = Solution()
print(ob.solve(s)) 입력
"@bCd12#4"
출력
True