문제
자연수가 주어졌을 때, 그 수에 포함된 서로 다른 숫자(digit)의 개수를 구하라. 이를 아름다운 수의 정도라 한다.
입력
테스트 케이스 수 T, 이후 각 줄에 자연수가 주어진다.
출력
각 자연수의 아름다운 수의 정도를 출력한다.
예제
| 입력 | 출력 |
|---|---|
3 11 123 11234 | 1 3 4 |
풀이
주어진 수의 각 자릿수를 순회하면서 서로 다른 숫자의 개수를 센다.
- 입력 수를 문자열로 처리하여 각 자릿수를 순회한다
- 이미 등장한 숫자가 아니면 카운트를 증가시키고 리스트에 추가한다
- 최종 카운트를 출력한다
핵심 아이디어: 문자열의 각 문자를 순회하며 중복을 제거한 뒤 개수를 세면 된다. set을 사용하면 len(set(x))로 더 간결하게 구현할 수 있다.
코드
t = int(input())
for _ in range(t):
x = input()
data = []
result = 0
for i in range(len(x)):
if int(x[i]) not in data:
result += 1
data.append(int(x[i]))
print(result)복잡도
- 시간: O(T * D) — T는 테스트 케이스 수, D는 자릿수
- 공간: O(1) — 서로 다른 숫자는 최대 10개