-
[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가 해당 리스트에 없다면 생성자가 있는 수가 아니므로 출력한다.
'Python_알고리즘' 카테고리의 다른 글
[Python] 백준 2941 크로아티아 알파벳 (0) 2021.07.02 [Python] 백준 1157 단어 공부 (0) 2021.07.01 [Python] 백준 4344 평균은 넘겠지 (0) 2021.06.29 [Python] 백준 1110 더하기 사이클 (0) 2021.06.26 [Python] 백준 2884 알람시계 (0) 2021.06.25