문제 개요
하나의 문자열 s가 주어졌을 때, 이 문자열이 다음 세 가지 요소를 모두 포함하고 있는지 확인해야 합니다.
- 숫자
- 소문자
- 대문자
참고: 그 외의 다른 기호나 특수 문자가 섞여 있어도 상관없지만, 위 세 가지 유형은 반드시 존재해야 합니다.
예를 들어 입력이 s = "p25KDs"라면 소문자(p), 숫자(25), 대문자(KD)가 모두 포함되어 있으므로 출력은 True가 됩니다.
해결 접근 방법
이 문제는 불리언(Boolean) 배열을 활용해 다음과 같은 단계로 해결할 수 있습니다.
- 크기가 3인 배열(arr)을 만들고 False로 초기화합니다.
- 문자열 s의 각 문자 c를 하나씩 순회하며 아래 조건을 검사합니다.
- c가 알파벳 또는 숫자라면 → arr[0] = True
- c가 소문자라면 → arr[1] = True
- c가 대문자라면 → arr[2] = True
- 순회가 끝난 후 배열 arr의 모든 요소가 True이면 True를 반환하고, 하나라도 False가 남아 있다면 False를 반환합니다.
여기서 사용되는 파이썬 내장 문자열 메서드는 다음과 같습니다.
- isalnum(): 문자가 알파벳 또는 숫자인지 확인
- islower(): 문자가 소문자인지 확인
- isupper(): 문자가 대문자인지 확인
- all(): 반복 가능한 객체의 모든 요소가 True일 때만 True 반환
예제 코드
아래 구현 예제를 통해 더 자세히 이해해 보겠습니다.
def solve(s):
arr = [False]*3
for c in s:
if c.isalnum():
arr[0] = True
if c.islower():
arr[1] = True
if c.isupper():
arr[2] = True
return all(arr)
s = "p25KDs"
print(solve(s))
입력
"p25KDs"
출력
True
복잡도 분석
이 알고리즘은 문자열의 길이를 n이라 할 때 각 문자를 한 번씩만 검사하므로 시간 복잡도는 O(n)입니다. 추가로 사용하는 배열의 크기가 고정적(3)이기 때문에 공간 복잡도는 O(1)로 매우 효율적입니다.