티스토리 뷰

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

 

First Try 🎉

def separator(x):
    """_summary_

    Args:
        x (int): 각 자리수를 따로 계산하고 싶은 integer
        
    Returns:
        int : 각 자리수를 합한 integer
    """
    a = x//1000 # x의 천의 자리 수
    b = (x - a*1000) // 100 # x의 백의 자리 수
    c = (x - a*1000 - b*100) // 10 # x의 십의 자리 수
    d = x % 10 # x의 일의 자리 수
    return a+b+c+d # 각 자리 수의 합

origin = set(list(range(1,10001))) # 1에서 10000 사이의 모든 정수
                                    # 전체 origin에서 집합의 차의 연산과 여집합을 이용하여 
                                    # 생성자가 없는 셀프 넘버만 추출해낼 것이다.
ops = []
for n in range(1, 10000):
    ops.append(separator(n)+n) # separator로 각 자리 수를 합하고, 해당 수를 더하여 d(n)을 계산한다.
    
ops = set(ops)
result = sorted(list(origin - ops)) #셀프 넘버를 구한다.
for n in result:
    print(n)

맞췄지만 맞춘 것 같지 않다. 비효율적인 방법이지만 떄론 무식한 방법이 성공할 때도 있다는 생각으로 접근했다. 특별히 규칙을 찾기 힘들었다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함