정답 코드:
A = set(range(1,10000))
B = set()
for i in A:
for j in str(i):
i += int(j)
B.add(i)
result = A - B
for k in sorted(result):
print(k)
코드 풀이:
내가 이렇게 코딩을 못했었나.. 깨닫게 된 문제..
엄청 오래 걸렸고 결국 에러가 나서 다른 사람 코드를 보고 수정했다.
우선 중복이 안되는 특성을 가진 세트를 이용하기 위해서
문제조건인 1만 아래의 수를 가진 setA 를 만들고,
빈 set B를 만든다
그 뒤 A를 반복문으로 i에 대입하는데,
이중 반복문을 통해 str(i)를 j로 대입해서,
다시 i에 i + j 를 반복해서 B 세트에 add한다.
그럼 B set에는 문제에서 말한 배열이 들어가고,
A - B 는 셀프넘버가 되기에,
result (셀프넘버) 값을 sorted(정렬) 하여 반복문을 통해
한 줄씩 출력 해주면 된다.
여기서 헷갈리는 부분은 문제 이해도 있지만
for 문인데, 예를 들어 A가 33일 경우,
첫 번째 반복문에서 i = 33 을 가져오고
이중 반복문에서 str(i) = '33' 이 되기에
i += int(j)는
i = 33 + 3 + 3 이 된다는 걸 이해하면 쉽다!