본문 바로가기
코딩공부/백준 (python)

[백준 4673] 셀프 넘버 (Python)

by CodingKwon 2022. 3. 1.

문제 링크

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를 한 줄씩 출력합니다.

댓글