숫자 num이 주어졌을 때, 이 숫자가 오직 0과 1로만 구성되어 있는지 확인해야 합니다.
예를 들어, 입력값이 num = 101101이라면 출력 결과는 True가 됩니다.
문제 해결 접근 방식
이 문제는 다음 단계를 통해 해결할 수 있습니다.
- num의 모든 자릿수를 요소로 가지는 새로운 집합(set)인
digits_set을 생성합니다. digits_set에서 0을 제거합니다.digits_set에서 1을 제거합니다.- 만약
digits_set의 크기가 0이라면, 즉 남은 자릿수가 없다면True를 반환합니다. - 그렇지 않으면
False를 반환합니다.
핵심 아이디어는 집합의 특성을 활용하는 것입니다. 집합은 중복된 값을 저장하지 않기 때문에, num의 모든 자릿수를 집합에 넣은 후 0과 1만 제거했을 때 집합이 비어 있다면 해당 숫자는 0과 1로만 이루어져 있음을 의미합니다.
아래 예시 코드를 통해 더 자세히 이해해 보겠습니다.
예제 코드
def solve(num): digits_set = set() while num > 0: digit = num % 10 digits_set.add(digit) num = int(num / 10) digits_set.discard(0) digits_set.discard(1) if len(digits_set) == 0: return True return False num = 101101 print(solve(num))
입력
101101
출력
True
코드 동작 원리 설명
- 자릿수 추출:
num % 10연산을 통해 가장 마지막 자릿수를 얻고,int(num / 10)으로 마지막 자릿수를 제거하며 반복합니다. - 집합 활용: 각 자릿수를
digits_set에 추가하면 중복 없이 고유한 자릿수만 저장됩니다. - 검증:
discard()메서드로 0과 1을 안전하게 제거한 후(요소가 없어도 오류가 발생하지 않음), 집합이 비었는지 확인하여 최종 결과를 판별합니다.
이 방법의 시간 복잡도는 숫자의 자릿수 길이에 비례하여 O(log n)입니다. 공간 복잡도 역시 최대 10개의 고유한 자릿수만 저장되므로 상수 공간 O(1)로 처리됩니다.