ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 백준 4673 셀프 넘버
    Python_알고리즘 2021. 6. 29. 17:47
    문제 바로가기

       문제분석   

    # 33 => 33+3+3=39 일 때, 33은 39의 생성자라고 하고, 이런 생성자가 없는 숫자를 셀프 넘버라 한다.

    # 문제의 핵심은 생성자 함수를 만들고, 셀프넘버를 제외하는 

    # 함수를 돌려 생성자가 나오면 담을 리스트를 초기화 한다.

    # 주어진 범위의 수들을 반복문을 돌려 함수로 모든 수의 생성자를 찾아 리스트에 담는다.

    # 다시 주어진 범위의 수들을 하나씩 꺼내 리스트에 있는지 확인하고 없다면 그게 셀프 넘버가 되므로 출력한다.

     

       문제풀이   

    def d(n):	# 생성자를 구하는 함수 
        num = n + sum(map(int, str(n)))	# 이 때 n이 생성자, num은 생성자가 있는 수가 된다.
        return num
    
    a = [0] * 10001		# 생성자가 있는 수들을 모아 놓을 리스트 초기화
    
    for i in range(1, 10001):
        a[i] = d(i)
    
        if i not in a:	# 리스트에 없다는 것은 생성자가 있는 수가 아니라는 뜻
            print(i)

    # 생성자(n)를 찾는 함수를 만든다. 숫자를 입력 받으면 문자로 변환하여 각 자리를 뗄 수 있게 만들고, 다시 연산이 가능하도록 map함수를 이용해 변환한 후 sum함수로 각 자리를 더한다. 원래 입력받은 숫자와 sum 값을 더하면 해당 수의 생성자를 찾을 수 있다.

    # 생성자 함수로 나온 결과들을 담을 리스트를 초기화 한다.

    # 1부터 10000까지 반복문을 돌리는데, 위에서 만든 함수를 이용해 생성자가 있는 수들을 모두 리스트에 담는다.

    # 그리고 i가 해당 리스트에 없다면 생성자가 있는 수가 아니므로 출력한다.

     

     

    댓글

Designed by Tistory.