사용자 도구

사이트 도구


ps:problems:boj:4673

셀프 넘버

ps
링크acmicpc.net/…
출처BOJ
문제 번호4673
문제명셀프 넘버
레벨실버 5
분류

기초

시간복잡도O(n)
인풋사이즈n=10000
사용한 언어Python
제출기록29968KB / 72ms
최고기록52ms
해결날짜2021/11/12
태그

6단계

풀이

  • 셀프 넘버에 대해서는 Self number에 이것저것 설명되어 있는데, 이 문제를 푸는데에는 필요없다.
  • n은 d(n)보다 작기 때문에, 10000이하에서 셀프 넘버가 아닌 수를 모두 찾으려면, 10000 이하의 모든 n에 대해 d(n)을 계산해보면 된다. 이렇게 구한 목록을 제외하고 나면 남은 숫자들은 셀프넘버이므로 그대로 출력하면 된다.
  • 수학적 성질을 연구해보면 좀더 효율적으로 계산할 수 있는 방법이 있을 것 같기도 한데.. 거기까지는 패스.

코드

"""Solution code for "BOJ 4673. 셀프 넘버".

- Problem link: https://www.acmicpc.net/problem/4673
- Solution link: http://www.teferi.net/ps/problems/boj/4673
"""


def d(n):
    ret = n
    while n:
        n, r = divmod(n, 10)
        ret += r
    return ret


def main():
    non_self_numbers = {d(x) for x in range(1, 10000)}
    print(*(x for x in range(1, 10000) if x not in non_self_numbers), sep='\n')


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
K W Q R​ B
 
ps/problems/boj/4673.txt · 마지막으로 수정됨: 2021/11/15 07:20 저자 teferi