알고리즘/BOJ

[BOJ] 4673 - 셀프 넘버

서노리 2022. 1. 14. 19:43
반응형

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

def func(n):
    sum = 0
    while(n >= 10):
        sum += n % 10
        n = n // 10
    sum += n
    return sum

data = set()
not_self = set()
for n in range(1, 10001):
    data.add(n)
    result = n + func(n)
    not_self.add(result)

result = data - not_self

for i in sorted(result):
    print(i)

이 문제는 1부터 10001까지의 수를 완전 탐색으로 검사하여 생성자가 있는 숫자를 제외한 셀프 넘버를 출력하는 문제이다. data 집합에는 1부터 10001까지의 모든 수를, not_self 집합에는 func() 함수를 이용하여 그중 생성자가 있는 숫자를 저장하였다. 집합 자료형을 사용한 이유는 not_self에 중복된 숫자가 저장될 수 있기 때문에 이를 제거하기 위함이고 차집합 연산을 이용하여 쉽게 정답을 구할 수 있기 때문이다. 다만 집합 자료형은 순서가 없기 때문에 sorted() 함수를 이용하여 정렬을 해준 후 출력을 해주어야 한다.

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ] 2667 - 단지번호붙이기  (0) 2022.01.16
[BOJ] 18352 - 특정 거리의 도시 찾기  (0) 2022.01.16
[BOJ] 5622 - 다이얼  (0) 2022.01.09
[BOJ] 1157 - 단어 공부  (0) 2022.01.06
[BOJ] 1439 - 뒤집기  (0) 2022.01.04