문제에서 수열을 만들 수 있다고 주어져있어서, 각 숫자를 초항으로 해서 만들 수 있는 숫자들을 전부 제외해주는 방식으로 문제를 풀었다. 10000보다 작거나 같은 숫자만 봐주면 되는 문제였기 때문에 크기가 10001짜리인 배열의 생성하고 초기값으로 True를 설정해줬다.
n, d(n),d(d(n)),... 과 같이 문제에서 주어져있어서 재귀 함수를 이용해서 구현할 계획을 세웠다.
num = [True]*10001
def d(n):
temp = n
ans = n
while temp>0:
ans += temp%10
temp //= 10
if ans > 10000:
return
num[ans] = 0
d(ans)
for i in range(1,10001):
if num[i] == True:
d(i)
for i in range(1,10001):
if num[i] == True:
print(i)
이번 문제는 딱히 없었던 것 같다. 주어진 조건에 맞춰서 구현했더니 쉽게 풀렸다.
이번 문제에서 사용한 10001짜리 배열을 미리 생성하고 그를 이용해서 연산횟수를 줄이는 아이디어는 앞으로 많이 쓰일 것 같기때문에, 잘 알아두고 생각해보는 연습을 하는 것이 중요할 것 같다.