문제 링크
https://www.acmicpc.net/problem/4673
4673번: 셀프 넘버
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,
www.acmicpc.net
나의 코드 (Python)
# 셀프넘버를 구하는 함수
def selfNumber(num):
sumNum = num + sum(map(int, str(num))) # 자기 자신 + 각 자리의 합
return sumNum
numbers = set(range(1, 10001)) # 1~10000 생성
result = set() # 중복을 허용하지 않는 자료형
# 1~10000까지 셀프넘버 계산
for i in range(1, 100001):
result.add(selfNumber(i))
# 1~10000을 셀프넘버로 빼면 셀프넘버가 아닌 값을 구할 수 있음
for res in sorted(numbers-result): # 순차적으로 출력
print(res)
셀프 넘버는 자기 자신과 각 자리의 합으로 구성됩니다.
num + sum(map(int, str(num))) 는 num을 str로 감싸면서 각 자리를 나누게 되고 이를 map()을 이용하여 int형으로 바꿔주고 이들의 합을 sum()을 통해서 합을 구할 수 있습니다. 이를 자기 자신(num)과 더하면 셀프 넘버가 됩니다.
이제 1~10000까지 자료형과 빈 set() 자료형을 만들어 줍니다.
이제 빈 set() 자료형인 result에 셀프 넘버를 for 문을 이용하여 1~10000까지 selfNumber() 함수를 이용하여 계산하고 이를 add()를 통해서 저장합니다.
sorted()를 통해 정렬된 1~10000 수 중에 셀프 넘버를 뺀 값 res를 한 줄씩 출력합니다.
'코딩공부 > 백준 (python)' 카테고리의 다른 글
[백준 11654] 아스키 코드 (Python) (0) | 2022.03.09 |
---|---|
[백준 1065] 한수 (Python) (0) | 2022.03.01 |
[백준 15596] 정수 N개의 합 (Python) (0) | 2022.03.01 |
[백준 4344] 평균은 넘겠지 (Python) (0) | 2022.02.22 |
[백준 8958] OX퀴즈 (Python) (0) | 2022.02.22 |
댓글