-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Silver V] Title: 셀프 넘버, Time: 4304 ms, Memory: 33240 KB -BaekjoonHub
- Loading branch information
Showing
2 changed files
with
69 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# [Silver V] 셀프 넘버 - 4673 | ||
|
||
[문제 링크](https://www.acmicpc.net/problem/4673) | ||
|
||
### 성능 요약 | ||
|
||
메모리: 33240 KB, 시간: 4304 ms | ||
|
||
### 분류 | ||
|
||
브루트포스 알고리즘, 구현, 수학 | ||
|
||
### 제출 일자 | ||
|
||
2024년 7월 12일 10:38:12 | ||
|
||
### 문제 설명 | ||
|
||
<p>셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.</p> | ||
|
||
<p>양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. </p> | ||
|
||
<p>예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.</p> | ||
|
||
<p>33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...</p> | ||
|
||
<p>n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다. </p> | ||
|
||
<p>생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97</p> | ||
|
||
<p>10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.</p> | ||
|
||
### 입력 | ||
|
||
<p>입력은 없다.</p> | ||
|
||
### 출력 | ||
|
||
<p>10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.</p> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) |