출처: 백준 4673번 셀프 넘버
출력 부분을 보면, 10,000까지의 셀프 넘버를 구하라는 것을 확인할 수 있다.
문제에서 설명해 준 규칙을 이용하여 셀프 넘버가 아닌 것들을 구하고, 제외해 주면 된다.
어떤 방식으로 각 자릿수를 더해주는 것이 좋은지가 이 문제의 핵심이다.
map
함수와 숫자를 문자열로 변환해 주는 것을 활용하면 쉽게 더해줄 수 있게 된다.
더해서 나오는 숫자가 같은 것일 수도 있는데, set
을 활용하면 중복 요소도 쉽게 처리할 수 있다.
numbers = set(range(1,10**4+1))
non_self_numbers = []
for i in range(1,10**4+1):
non_self_number = i+sum(map(int,str(i)))
non_self_numbers.append(non_self_number)
self_numbers = numbers - set(non_self_numbers)
self_numbers = list(self_numbers)
self_numbers.sort()
print(*self_numbers,sep="\n")
처음에는 각 자릿수를 더해주는 것이 쉽게 떠오르지 않아서, 다른 분의 풀이를 참고했던 것으로 기억한다.
일일이 10,100,1000으로 나누어서 더해줘야 하나라고 고민도 해봤던 것 같다.
해당 풀이로도 충분히 접근이 가능해 보이나, 문자열을 활용하는 것이 코드가 참 깔끔해 보인다.