[LeetCode] 2299. Strong Password Checker II

김민우·2023년 2월 4일
0

알고리즘

목록 보기
131/189

- Problem

2299. Strong Password Checker II

문제는 간단하다. 인자로 주어진 password가 주어진 조건을 모두 만족하는지 판별하는 문제이다.

주어진 조건은 다음과 같다.

  • password의 길이가 8 이상인가?
  • 적어도 하나 이상의 영소문자를 포함하는가?
  • 적어도 하나 이상의 영대문자를 포함하는가?
  • 적어도 하나 이상의 숫자를 포함하는가?
  • 적어도 하나 이상의 특수 문자를 포함하는가? 포함될 수 있는 특수 문자는 "!@#$%^&*()-+"이다.
  • 연속된 문자가 같은 문자인가?
    - 만약 그렇다면, False를 리턴한다.

- 내 풀이

class Solution:
    def strongPasswordCheckerII(self, password: str) -> bool:
        special_characters = set("!@#$%^&*()-+")
        digits = set('0123456789')
        lowercase = set('abcdefghijklmnopqrstuvwxyz')
        uppercase = set('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
        
        is_lower = is_upper = is_digit = is_special = False
        characters = 0

        for i, c in enumerate(password):
            if i > 0 and password[i-1] == c:
                    return False

            if c in lowercase:
                is_lower = True

            elif c in uppercase:
                is_upper = True

            elif c in digits:
                is_digit = True

            elif c in special_characters:
                is_special = True
            
            characters += 1

        return is_digit and is_lower and is_upper and is_special and characters >= 8

builtin 되어 있는 함수를 활용하면 아래의 코드처럼 작성할 수도 있다.

class Solution:
    def strongPasswordCheckerII(self, password: str) -> bool:
        special_characters = set("!@#$%^&*()-+")
        is_lower = is_upper = is_digit = is_special = False

        for i, c in enumerate(password):
            if i > 0 and password[i-1] == c:
                    return False

            if c.islower():
                is_lower = True

            elif c.isupper():
                is_upper = True

            elif c.isdigit():
                is_digit = True

            elif c in special_characters:
                is_special = True
            
        return is_digit and is_lower and is_upper and is_special and len(password) >= 8

정규 표현식을 이용해서 접근해 볼 수도 있겠다. 하지만 하지 않지.

- 결과

profile
Pay it forward.

0개의 댓글