[백준] #4673 - 셀프 넘버 (파이썬, Python)
셀프 넘버
https://www.acmicpc.net/problem/4673
내가 쓴 코드
다음 d를 구할 때, 생성자를 문자열로 바꾸고 각 자릿수만 숫자로 다시 바꾸는 방법으로 비교적 간편하게 각 자릿수의 합을 구할 수 있지만, 나머지와 나눗셈을 이용하는 방법이 성능면에서 더욱 좋다.
self_nums = [True] * 10001
for i in range(1, 10001):
if not self_nums[i]:
continue
print(i)
now = i
while True:
next = now
while now > 0:
next += now % 10
now //= 10
if next > 10000:
break
self_nums[next] = False
now = next
집합 자료형을 이용한 코드
위 코드로 정답 판정을 받은 뒤에 인터넷에서 검색해 찾은 방법이다.
집합 자료형을 사용하면 손쉽게 자료의 중복을 필터링할 수 있다.
이렇게 remove_set에 자료를 넣으면 알아서 중복은 사라지고 이후에 전체에서 빼주면 쉽게 셀프 넘버를 구할 수 있다.
이 방법이 내가 생각한 방법보다 더욱 빠르다.
remove_set = set()
for i in range(1, 10001):
d = i
while i > 0:
d += i % 10
i //= 10
remove_set.add(d)
self_nums = sorted(set(range(1, 10001)) - remove_set)
print(*self_nums, sep="\n")
Author And Source
이 문제에 관하여([백준] #4673 - 셀프 넘버 (파이썬, Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ms269/백준-4673-셀프-넘버-파이썬-Python-nh2d82wz저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)