암호를 나타내는 문자열 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