From f3341e133a5319c177aa3b87e1c7f969c6d0b304 Mon Sep 17 00:00:00 2001 From: Youn-Rha <86452280+Youn-Rha@users.noreply.github.com> Date: Fri, 12 Jul 2024 10:38:22 +0900 Subject: [PATCH] =?UTF-8?q?[Silver=20V]=20Title:=20=EC=85=80=ED=94=84=20?= =?UTF-8?q?=EB=84=98=EB=B2=84,=20Time:=204304=20ms,=20Memory:=2033240=20KB?= =?UTF-8?q?=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md" | 40 +++++++++++++++++++ ...04\342\200\205\353\204\230\353\262\204.py" | 29 ++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 "\353\260\261\354\244\200/Silver/4673.\342\200\205\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204/README.md" create mode 100644 "\353\260\261\354\244\200/Silver/4673.\342\200\205\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204/\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204.py" diff --git "a/\353\260\261\354\244\200/Silver/4673.\342\200\205\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204/README.md" "b/\353\260\261\354\244\200/Silver/4673.\342\200\205\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204/README.md" new file mode 100644 index 0000000..bce9acd --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/4673.\342\200\205\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204/README.md" @@ -0,0 +1,40 @@ +# [Silver V] 셀프 넘버 - 4673 + +[문제 링크](https://www.acmicpc.net/problem/4673) + +### 성능 요약 + +메모리: 33240 KB, 시간: 4304 ms + +### 분류 + +브루트포스 알고리즘, 구현, 수학 + +### 제출 일자 + +2024년 7월 12일 10:38:12 + +### 문제 설명 + +
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.
+ +양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다.
+ +예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.
+ +33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
+ +n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다.
+ +생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
+ +10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
+ +### 입력 + +입력은 없다.
+ +### 출력 + +10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.
+ diff --git "a/\353\260\261\354\244\200/Silver/4673.\342\200\205\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204/\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204.py" "b/\353\260\261\354\244\200/Silver/4673.\342\200\205\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204/\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204.py" new file mode 100644 index 0000000..3daf46c --- /dev/null +++ "b/\353\260\261\354\244\200/Silver/4673.\342\200\205\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204/\354\205\200\355\224\204\342\200\205\353\204\230\353\262\204.py" @@ -0,0 +1,29 @@ +import sys, math + + +# sys.setrecursionlimit(100000) + + +def input(): + return sys.stdin.readline() + + +def self_num(): + def cal(n): + lst = list(map(int, str(n))) + return n + sum(lst) + for i in range(1, 10001): + p = i + while cal(p) <= 10000: + p = cal(p) + if num[p]: + num[p] = False + + +# main +if __name__ == "__main__": + num = [True] * 10001 + self_num() + for i in range(1, 10001): + if num[i]: + print(i)