개발 연습장/백준 문제풀이

[파이썬, Python] 백준 4673: 셀프 넘버

LooanCheong 2022. 12. 10. 18:41
반응형

문제

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

코드

numbers = set(range(1,10001))
remove_numbers = set()
for i in range(1, 10001):
    for j in str(i):
        i += int(j)
    remove_numbers.add(i)
self_numbers = sorted(numbers - remove_numbers)
for i in self_numbers:
    print(i)

설명

우선 numbers의 범위가 정해져 있으므로,
1부터 10000까지의 수를 중복 없이 만들기 위해 set을 사용하여 만들어준다.

이후 제거할 숫자인 remove_numbers도 비어있는 set 리스트로 만들어준다.

그리고 1부터 10000까지의 숫자 i에 대해서 반복문을 만들어주는데,
이 반복문의 안에는 i를 문자열로 치환한 j가 존재한다.
이를 이용해 각 자리를 더해주고(123인 경우 1+2+3)
이를 기존 값 i에 더해주어 생성자가 있는 숫자의 리스트(remove_numbers)를 만들어준다.

이후 셀프 넘버를 구하기 위해 numbers에서 remove_numbers를 빼준 수들을 정렬하여
차례대로 출력해준다.

반응형